(C help) Izmjena txt datoteke

poruka: 2
|
čitano: 2.224
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
(C help) Izmjena txt datoteke
pitanje

Evo pokusavam napraviti program koji pronalazi zadani string unutar tekstualne datoteke i zamjenjuje ga sa drugim zadanim nizom. Problem je sta nikako nemogu napravit a da ne stvaram pomocnu datoteku. Dali se to uopce moze?

Evo mog koda (malo je neuredno al moze se skuzit...):

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ispisi (char *ime) {
    FILE *f;
    char c;
   
    if ((f=fopen(ime,"r"))) {
        printf("\n=================== %s.txt ==================\n",ime);
        while ((c = fgetc(f)) != EOF)
            printf("%c", c);
        printf("==================================================\n\n");
    }
    else perror("\n"), exit(1);
   
    fclose(f);
}

void promjeni (char *ime) {
    FILE *f, *f2;
    char nadi[20], zamjena[20], red[20], pomocni[20],*r;
    int br_zamjena=0, l_nadi, l_zamjena;
   
    printf("Pronadi: ");
    scanf("%s",nadi);
   
    printf("Zamjeni sa: ");
    scanf("%s",zamjena);
   
    l_nadi=strlen(nadi);
    l_zamjena=strlen(zamjena);
   
    f=fopen(ime,"r");
    f2=fopen("radni","w");
   
    while((fgets(red,20,f))) {
        while ((r = strstr(red,nadi))) {
            strcpy(pomocni,r+l_nadi);
            strcpy(r, zamjena);
            strcat(r,pomocni);   
            br_zamjena++;
            r +=l_zamjena;       
        }
        fputs(red,f2);
    }
   
    fclose(f);
    fclose(f2);
   
    printf("Broj zamjena: %d\n",br_zamjena);
       
}

void zamjeni (char *ime1, char *ime2) {
    FILE *f1, *f2;
    char c;
   
    if ((f1=fopen(ime1,"w")) && (f2=fopen(ime2,"r")))
        while ((c = fgetc(f2)) != EOF) fputc(c, f1);
    else perror("\n"), exit(1);
   
    fclose(f1);
    fclose(f2);
   
    f2=fopen(ime2,"w");
    fclose(f2);
}


int main()
{
    char ime[10], radni[]="radni";
   
    printf("Upisi ime datoteke koju zelis otvoriti: ");
    scanf("%s",ime);
       
    ispisi(ime);
    promjeni(ime);
    zamjeni(ime, radni);
    ispisi(ime);
   
   
    return 0;
}

 
0 0 hvala 0
16 godina
neaktivan
offline
(C help) Izmjena txt datoteke
autorov komentar
prihvaćeno rješenje

Uglavnom rjesavam ovo cijeli dan i kad napokon odlucim pitat za pomoc sam riješio. Nisam se sjetio fgetpos() i fsetpos() funkcija...

Evo koda ako kome treba:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ispisi (char *ime) {
    FILE *f;
    char c;
   
    if ((f=fopen(ime,"r"))) {
        printf("\n=================== %s.txt ==================\n",ime);
        while ((c = fgetc(f)) != EOF)
            printf("%c", c);
        printf("==================================================\n\n");
    }
    else perror("\n"), exit(1);
   
    fclose(f);
}

void promjeni (char *ime) {
    FILE *f;
    fpos_t p;
    char nadi[20], zamjena[20], red[20], pomocni[20],*r;
    int br_zamjena=0, l_nadi, l_zamjena;
   
    printf("Pronadi: ");
    scanf("%s",nadi);
   
    printf("Zamjeni sa: ");
    scanf("%s",zamjena);
   
    l_nadi=strlen(nadi);
    l_zamjena=strlen(zamjena);
   
    f=fopen(ime,"r+w");
   
    do {
        fgetpos(f, &p);
        if((fgets(red,20,f))) {
            while ((r = strstr(red,nadi))) {
                strcpy(pomocni,r+l_nadi);
                strcpy(r, zamjena);
                strcat(r,pomocni);   
                br_zamjena++;
                r +=l_zamjena;       
            }
        fsetpos(f, &p);
        fputs(red,f);
        fgets(red,20,f);
        }
        else break;
    } while(1);
   
    fclose(f);
   
    printf("Broj zamjena: %d\n",br_zamjena);
       
}


int main()
{
    char ime[10];
   
    printf("Upisi ime datoteke koju zelis otvoriti: ");
    scanf("%s",ime);
       
    ispisi(ime);
    promjeni(ime);
    ispisi(ime);
   
   
    return 0;
}

 

Mozete i pobrisat ovaj topic jer je posto besmislen osim ako mi netko moze rec zasto ne radi kad koristim fgets() za unos stringa kojeg trazim i zamjenjujem?

Poruka je uređivana zadnji put pon 9.2.2009 1:07 (PeroBatina).
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice