Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[C] Trova/Sostituisci in file di testo
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
red_devil87
Comune mortale
Comune mortale


Registrato: 20/06/07 16:16
Messaggi: 2

MessaggioInviato: 20 Giu 2007 16:24    Oggetto: [C] Trova/Sostituisci in file di testo Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 20 Giu 2007 16:47    Oggetto: Re: [C] Trova/Sostituisci in file di testo Rispondi citando

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... Wink ... 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
Profilo Invia messaggio privato HomePage
red_devil87
Comune mortale
Comune mortale


Registrato: 20/06/07 16:16
Messaggi: 2

MessaggioInviato: 20 Giu 2007 17:57    Oggetto: Rispondi citando

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... Wink
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 21 Giu 2007 11:10    Oggetto: Rispondi

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 Smile

... 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? Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
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