+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Copiare file di testo in C

  1. #1
    valerix non è in linea Novello
    Salve ragazzi,

    ho un problema devo realizzare un programma in C per la gestione di un file di testo, in pratica devo poter aggiungere, rimuovere o modificare delle attività già presenti su un file da me creato.

    Mi sono già bloccato all'aggiungere una attività....

    non riesco a copiare il contenuto del file da me creato in un novo file dello stesso formato, cioè riesco a creare il nuovo file ma non riesco a copiarci dentro quello che stava scritto sul primo.

    Qualcuno sa darmi una mano? aspetto risposte grazie in anticipo a tutti

  2. #2
    Partiamo dal codice che hai scritto ...
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    valerix non è in linea Novello
    Questo è il codice che ho scritto:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      FILE *fin;
      FILE *fout;
      int scelta;
      char attivita;
      char * buffer = (char*) malloc(255*sizeof(char));
      printf("GESTIONE NOTE SPESE\n");
      printf("Che operazioni vuoi svolgere?\n");
      printf("1) Aggiungere un'attivita'\n");
      printf("2) Rimuovere un'attivita'\n");
      printf("3) Modificare un'attivita'\n");
      scanf("%d", &scelta);
      printf("\n\n\n\n");
      switch(scelta)
       {
        case 1:
               fin = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\elenco.txt", "a");
      
               // Gestisco gli errori
               if (NULL == fin) 
                { 
                 fputs("Impossibile aprire il file.\n", stderr);
                 return 0;
                }
               fputs("end_file\n", fin);
               fclose(fin);
               printf("Inserire l'attivita' che si desidera aggiungere:\n");      //acquisizione attività
               scanf("%d", &attivita);
               fout = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\nuovo elenco.txt", "w");
               do
                {
                 fgets(buffer, 255, fin);
                 fputs(buffer, fout);
                 free(buffer);
                }
               while(strcmp(buffer,"end_file") != 0);
               fputs(attivita, fin);
      
               fclose(fout);
               break;
       }        
               
               system("pause");
               return 0;
     
    }
    


    Ho dei problemi proprio slu do while e sull'acquisizione dell'attività da tastiera
    Ultima modifica di AntonioG; 29-07-2008 11:05  Motivo: Tag CODE

  4. #4
    valerix non è in linea Novello
    Nessuno sa aiutarmi???

  5. #5
    Se devi solamente copiare il file, perche' non usi le API di Windows (se lavori con Windows) ...?

    O devi aggiungere dei dati ad un file di testo prelevandoli da un altro?
    ℹ️ Leggi di più su AntonioG ...

  6. #6
    neobaumuth non è in linea Scolaretto
    Ciao,mi sembra di capire che tu stia lavorando in console, dato anche l'uso dei SYSTEM, e non in Win32.
    Intanto credo che tu debba modificare questo:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      FILE *fin;
      FILE *fout;
      int scelta;
      char attivita;
      char * buffer = (char*) malloc(255*sizeof(char));
      printf("GESTIONE NOTE SPESE\n");
      printf("Che operazioni vuoi svolgere?\n");
      printf("1) Aggiungere un'attivita'\n");
      printf("2) Rimuovere un'attivita'\n");
      printf("3) Modificare un'attivita'\n");
      scanf("%d", &scelta);
      printf("\n\n\n\n");
      switch(scelta)
       {
        case 1:
               fin = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\elenco.txt", "a");
      
               // Gestisco gli errori
               if (NULL == fin) 
                { 
                 fputs("Impossibile aprire il file.\n", stderr);
                 return 0;
                }
               fputs("end_file\n", fin);
               /*fclose(fin);    Se qui chiudi, dopo devi riaprire anche per leggere ed effettuare la tua copia*/
               printf("Inserire l'attivita' che si desidera aggiungere:\n");      //acquisizione attività
               scanf("%d", &attivita);
               fout = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\nuovo elenco.txt", "w");
               do
                {
                 fgets(buffer, 255, fin);
                 fputs(buffer, fout);
                 free(buffer);
                }
               while(strcmp(buffer,"end_file") != 0);
                          
     
               fputs(attivita, fout);   //fin lo hai rilasciato! Credo tu voglia scrivere sul nuovo file...
      
               fclose(fout);
               break;
       }        
               
               system("pause");
               return 0;
     
    }
    
    Inoltre, spiega meglio i passaggi che vuoi fare, così che il tuo codice si di più facile lettura.
    Ultima modifica di neobaumuth; 29-07-2008 14:55 
    ℹ️ Leggi di più su neobaumuth ...

  7. #7
    valerix non è in linea Novello
    allora neobaumuth grazie per il tuo interessamento innanzitutto....

    poi ho eseguito le modifiche che mi hai suggerito ma non ho risolto niente non mi scrive niente nel nuovo file e neanche l'input da tastiera che vado a richiedere e quando avvio l'eseguibile si blocca proprio sull'input e non và più avanti sono costretto a chiudere io la finestra della linea di comando dalla x perchè sennò rimane aperta e bloccata...

  8. #8
    neobaumuth non è in linea Scolaretto
    Prova così:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      FILE *fin;
      FILE *fout;
      int scelta;
      char[] attivita; //Questo perchè presumo che la tua attività consti in più di una lettera.
      char * buffer = (char*) malloc(255*sizeof(char));
      printf("GESTIONE NOTE SPESE\n");
      printf("Che operazioni vuoi svolgere?\n");
      printf("1) Aggiungere un'attivita'\n");
      printf("2) Rimuovere un'attivita'\n");
      printf("3) Modificare un'attivita'\n");
      scanf("%d", &scelta);
      printf("\n\n\n\n");
      switch(scelta)
       {
        case 1:
               fin = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\elenco.txt", "a");
      
               // Gestisco gli errori
               if (NULL == fin) 
                { 
                 fputs("Impossibile aprire il file.\n", stderr);
                 return 0;
                }
               fputs("end_file\n", fin);
               /*fclose(fin);    Se qui chiudi, dopo devi riaprire anche per leggere ed effettuare la tua copia*/
               printf("Inserire l'attivita' che si desidera aggiungere:\n");      //acquisizione attività
               scanf("%s", attivita); // il %d è solo per decimali, e l'argomento deve essere *int. Il reference non serve perchè il nome di una array è di fatto il puntatore al 1° elem.
               fout = fopen("C:\\Documents and Settings\\Valerio\\Desktop\\nuovo elenco.txt", "w");
               do
                {
                 fgets(buffer, 255, fin);
                 fputs(buffer, fout);
                 free(buffer);
                }
               while(strcmp(buffer,"end_file") != 0);
                          
     
               fputs(attivita, fout);   //fin lo hai rilasciato! Credo tu voglia scrivere sul nuovo file...
      
               fclose(fout);
               break;
       }        
               
               system("pause");
               return 0;
     
    }
    
    Ultima modifica di neobaumuth; 29-07-2008 16:45 
    ℹ️ Leggi di più su neobaumuth ...

  9. #9
    samuele_70 non è in linea Novello
    Quote Originariamente inviato da neobaumuth Visualizza il messaggio
    Prova così:

    ..
      char[] attivita; //Questo perchè presumo che la tua attività consti in più di una lettera.
    ...
    
    Una riga del genere, oltre che concettualmente errata, non viene neanche compilata
    ℹ️ Leggi di più su samuele_70 ...

  10. #10
    neobaumuth non è in linea Scolaretto
    Hai ragione, sarebbe char attivita[]... Lapsus!
    Oppure puoi impostare un limite alla dimensione dell'array, che so, 20 elementi, 30, quelli che ti servono!
    ℹ️ Leggi di più su neobaumuth ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. [VBA]Copiare da un file di testo solo alcune righe in un nuovo file di testo
    Da Phil_cattivocarattere nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 13-02-2018, 12:28
  2. Risposte: 3
    Ultimo Post: 29-07-2008, 10:38
  3. come copiare file di testo
    Da mariade nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 03-09-2006, 22:04
  4. Risposte: 4
    Ultimo Post: 16-05-2006, 10:22
  5. Copiare da label a file di testo
    Da luchino nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 20-04-2005, 17:21