PDA

Visualizza la versione completa : [C] Sostituzione stringa con un'altra in nuovo file


jonnyforever
18-01-2012, 15:44
buonasera a tutti...ho una difficoltà il programma dovrebbe stampare un file in output
ma mi stampa un output.txt bianco e dovrebbe copiare se trova la parola nel file1 dizionario.txt la corrispettiva parola in inglese sostituita al file 2.txt e stampare un terzo file.txt con, sia le parole della lista del file2 sia quelle sostituite nel file2 in inglese.
grazie tante sono in difficoltà e il programma nn lavora come dovrebbe !
Esempio di dizionario.txt
anatra, duck
cane, dog
farfalla, butterfly
gatto, cat
leone, lion
toro, bull
Esempio di file di input
lepre
anatra
koala
giraffa
leone
cavallo
ape
cane

Esempio di file di output prodotto (in inglese sono evidenziate le righe cambiate)
lepre
duck
koala
giraffa
lion
cavallo
ape
dog


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXS 30
#define DIZ "dizionario.txt"

int main()
{
FILE*fp,*fpin,*fpout;


char str[MAXS],str2[MAXS];

char ita[MAXS],eng[MAXS],nome[MAXS];

fp=fopen(DIZ,"r");
if(fp==NULL)
{
printf("errore\n");
return -1;
}

fpin=fopen("in.txt","r");
if(fpin==NULL)
{
printf("errore\n");
return -2;
}

fpout=fopen("ok.txt","w");
if(fpin==NULL)
{
printf("errore\n");
return -2;
}

while(fgets(str,MAXS,fp)!=NULL)
sscanf(str,"%s %s",ita,eng);
while(fgets(str2,MAXS,fpin)!=NULL )
sscanf(str2,"%s",nome);{
if(strcmp(eng,nome)==0)
{
fprintf(fpout,"%s\n",eng);
}
}

fclose(fp);
fclose(fpin);
fclose(fpout);
return 0;
}

oregon
18-01-2012, 16:14
Il primo ciclo while



while(fgets(str,MAXS,fp)!=NULL)
sscanf(str,"%s %s",ita,eng);


legge tutte le parole dal dizionario ma non le memorizza in due vettori come sarebbe necessario e quindi nelle due variabili troverai sempre le ultime due parole (quindi, così com'è, questo ciclo è inutile) ...

Il secondo ciclo è indipendente dal prim (anche se tu l'hai scritto come se uno dipendesse dall'altro) e inizia quando termina il primo



while(fgets(str2,MAXS,fpin)!=NULL )
sscanf(str2,"%s",nome);


e non fa altro che leggere tutto il file di input e mantenere nella variabile l'ultima parola (così com'è, anche questo ciclo è inutile) ...

A questo punto rimane, per ultimo, il codice



{
if(strcmp(eng,nome)==0)
{
fprintf(fpout,"%s\n",eng);
}
}


che viene eseguito indipendentemente dai cicli precedenti e una sola volta. Essendo eng e nome gli ultimi dati letti dai due cicli predenti, non verrà soddisfatta mai e mai verrà scritto sul file in output.

Devi rivedere tutto l'algoritmo che pensavi di adottare con quei cicli ... le correzioni non sono banali.

jonnyforever
18-01-2012, 16:48
ok grazie!! anche se comunque la mia intenzione era aprire il file leggerlo e aprire in conteporanea il secondo file se no come faccio a verificare se una parola vi è nell altro file? altrimenti demo memorizzarlo appunto in str1 e l altro in str2? grazieeee :D :D

alka
19-01-2012, 10:07
Avevi già posto lo stesso problema in questa discussione (http://forum.html.it/forum/showthread.php?s=&threadid=1492566): se ci sono sviluppi in seguito, in futuro continua la discussione che hai già aperto invece di crearne una nuova.

Loading