Precedente :: Successivo |
Autore |
Messaggio |
red_devil87 Comune mortale
Registrato: 20/06/07 16:16 Messaggi: 2
|
Inviato: 20 Giu 2007 16:24 Oggetto: [C] Trova/Sostituisci in file di testo |
|
|
Salve!!! Il testo del mio compito dice:
"Scrivere un programma ANSI C che acquisisce un file di testo e due stringhe e poi costruisce un nuovo file di testo ottenuto dal file di testo precedente sostituendo ogni occorrenza della prima stringa con la seconda stringa."
Bene...il programma l'ho scritto, compila(seppur con un errore di warning! )...ma produce in output un file di testo vuoto!!!
Qualcuno può dare un'occhiata a questo maledetto codice e farmi notare gli errori???
GRAZIE!
Codice: | #include <stdio.h>
#include <string.h>
#define FILE_MAX 10000
#define STRING_MAX 256
int carica(FILE *f, char *recTxt);
int match(char *old_string, char *recTxt, int i);
int len(char *old_string);
/* Restituisce una stringa uguale a recTxt, ma in cui
ogni occorrenza di str_in viene sostituita con str_out */
char *replace(char *recTxt, char *old_string, char *new_string);
/*prog.exe inputfile outputfile strsearch strreplace*/
int main(int argc, char *argv[])
{
FILE *fileinput = '\0',
*fileoutput = '\0';
char recTxt[FILE_MAX];
/*se la sintassi è sbagliata*/
if(argc != 5)
{
printf("\nSintassi: \nProgramma.exe inputfile.txt outputfile.txt searchstring replacestring\n");
printf("Provare a rieseguire il programma con la corretta sintassi come descritta nella relazione.\n\n");
}
/*se il file di input non viene aperto*/
else if (!(fileinput = fopen(argv[1], "r")))
{
printf("Errore nell'apertura del file di input!\n");
printf("Provare a rieseguire il programma con la corretta sintassi come descritta nella relazione.\n\n");
}
/*se il file di output non viene aperto*/
else if (!(fileoutput = fopen(argv[2], "w")))
{
printf("Errore nell'apertura del file di output!\n");
printf("Provare a rieseguire il programma con la corretta sintassi come descritta nella relazione.\n\n");
}
else
/* sostituisce ogni occorrenza di strSearch con strRepl */
replace(recTxt, argv[3], argv[4]);
/*chiusura dei due file*/
fclose (fileinput);
fclose (fileoutput);
return 0;
}
int carica(FILE *f, char *recTxt)
{
int lun;
lun = 0;
fscanf(f,
"%c",
&recTxt[lun]);
while(recTxt[lun] != EOF)
{
++lun;
fscanf(f,
"%c",
&recTxt[lun]);
}
recTxt[lun] = '\0';
return(lun);
}
int match(char *old_string, char *recTxt, int i)
{
int j,
k;
j = 0;
k = 1;
while ((old_string[j] == recTxt[i+j]) && (old_string[j] != '\0'))
++j;
if (old_string[j] != '\0')
k = 0;
return(k);
}
int len(char *old_string)
{
char *p;
p = old_string;
while (*old_string != '\0' )
{
++old_string;
}
return(old_string - p);
}
char *replace(char *recTxt, char *old_string, char *new_string)
{
int i,
j,
k,
L;
char new_txt[FILE_MAX];
i = 0;
j = 0;
L = len(old_string);
while (recTxt[i] != '\0')
{
if (match(old_string, recTxt, i) == 1)
{
k = 0;
while (new_string[k] != '\0')
{
new_txt[j] = new_string[k];
++j;
++k;
}
i = i + L; /* e mi sposto in recTxt subito dopo old_string */
}
else /* Altrimenti, copio un altro carattere di recTxt su new_txt */
{
new_txt[j] = recTxt[i];
++i;
++j;
}
}
new_txt[j] = '\0'; /* Alla fine */
return(new_txt); /* inserisco il carattere '\0' di fine stringa */
} |
|
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 20 Giu 2007 16:47 Oggetto: Re: [C] Trova/Sostituisci in file di testo |
|
|
red_devil87 ha scritto: | Qualcuno può dare un'occhiata a questo maledetto codice e farmi notare gli errori??? |
non posso esagerare nell'aiuto perchè è un compito... ... in ogni caso ti dico che hai sicuramente dimenticato di leggere dal file di input (lo apri, ok, ma poi?) e hai anche sicuramente dimenticato di scrivere nel file di output (lo apri, quindi viene creato, ma poi?)
forza, manca poco 8) |
|
Top |
|
|
red_devil87 Comune mortale
Registrato: 20/06/07 16:16 Messaggi: 2
|
Inviato: 20 Giu 2007 17:57 Oggetto: |
|
|
Oddio...quanto te ne sarei grato se mi dessi una mano...come faccio a scrivere sul file di output???e poi la lettura del file di input non avviene con la funzione CARICA???Per qualsiasi correzione concreta ti sarò infinitamente grato...d'altra parte l'hai detto tu...manca poco!!!E sinceramente mi è rimasto poco tempo per lavorarci su...sapessi quanto gliene ho già speso su!!!!Da questo capirai che sono alle prime armi...quindi visto che hai già individuato l'errore hai la correzione pronta... |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 21 Giu 2007 11:10 Oggetto: |
|
|
red_devil87 ha scritto: | la lettura del file di input non avviene con la funzione CARICA? |
sì, potrebbe... però tu non richiami la funzione carica() da nessuna parte...
red_devil87 ha scritto: | Da questo capirai che sono alle prime armi...quindi visto che hai già individuato l'errore hai la correzione pronta... |
so perchè non funziona, ma non ho nessuna correzione pronta. anche perchè TU lo devi far funzionare, non IO
... e alla fine, dopo che hai richiamato la replace(), non credi ti rimanga ancora da richiamare una funzione che non hai ancora scritto, appunto quella per scrivere il file output? |
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|