Creazione di un FILE

di il
5 risposte

Creazione di un FILE

/* Si desidera sviluppare un programma in linguaggio C per la modi?ca di un ?le di testo. La modi?ca consiste nel sostituire – scambiandoli tra loro – due caratteri alfabetici dati. In particolare, tutte le occorrenze del primo carattere dovranno essere sostituite dal secondo e viceversa. La sostituzione deve avvenire mantenendo la forma (maiuscola o minuscola) della lettera originaria. Il programma chiede all’utente tre parametri: il nome del ?le di testo da elaborare, il nome di un secondo ?le di testo nel quale salvare il risultato ed una stringa di 2 caratteri che speci?ca i caratteri da scambiare. Il ?le di testo è composto da un numero imprecisato di linee. Ad esempio, se il programma venisse eseguito sul file TESTO.TXT che contiene “QUEL RAMO del lago di Como, che volge a mezzogiorno, tra due CATENE non interrotte di MONTI, tutto a seni e a golfi, a seconda dello sporgere E DEL RIENTRARE di quelli, vien, quasi” e la stringa di due caratteri fosse “ae” allora il programma dovrebbe produrre il seguente ?le OUTPUT.TXT “QUAL REMO dal lego di Como, cha volga e mazzogiorno, tre dua CETANA non intarrotta di MONTI, tutto e sani a e golfi, e saconde dallo sporgara A DAL RIANTRERE di qualli, vian, quesi” Avendo sostituito tutte le lettere A (a) con E (e) e tutte le lettere E (e) con A (a). */

Questo è il testo di un programma che devo sviluppare ! E' il primo programma riguardante l'utilizzo dei file quindi posso dire di non aver ancora un'idea di come fare ! In primo luogo vorrei sapere se i file che mi servono per l'input e per l'output li devo creare io e poi andarli ad aprire da programma, o c'è un modo per far si che il programma me li crei !? Perchè se ho capito bene con "fopen" si apre un file pero già esistente ! È possibile crearlo direttamente da programma un file .txt ? Grazie.

5 Risposte

  • Re: Creazione di un FILE

    Il testo dell'esercizio sembra indicare il fatto che il file già esiste (e quindi puoi crearlo con il notepad).

    Tuttavia, la fopen ti permette sia di aprire file esistenti sia di crearli.

    In questi casi, la cosa migliore da fare è studiare la funzione dalla documentazione prima di usarla

    http://www.cplusplus.com/reference/cstdio/fopen
  • Re: Creazione di un FILE

    Si grazie infatti mi ero gia messo a leggere ! Ho visto che se richiamo un file in modalita di scrittura (w), se il file non esiste mi viene automaticamente creato! Quindi io l'esercizio pensavo di farlo che inserisco il testo in un file che chiamo "input.txt" ad esempio,poi faccio fare al programma tutto il lavoro necessario per cambiare il testo presente in input.txt e salvarlo in un'altro file chiamato ad esempio "output.txt"...piu o meno è cosi che vorrei lavorare ! Per il fatto che le lettere maiuscole devono rimanere tali e quelli minuscole pure,dovrò fare degli if per delimitare le minuscole (tramite i valori ascii) e anche per le maiuscole lo stesso discorso...che dite ??
  • Re: Creazione di un FILE

    Fossi in te non creerei il file con lo stesso programma ma con il notepad e tratterei il file esistente.

    Per le lettere, quando le leggi, utilizza semplicemente la funzione

    tolower
    http://www.cplusplus.com/reference/cctype/tolower
  • Re: Creazione di un FILE

    Cioè quindi tu dici che farei meglio a creare un file col notepad con già dentro il testo sul quale voglio lavorare col programma,e poi salvo un file in uscita con le modifiche ?!?? ...In effetti...Per quanto riguarda tolower,quella funzione converte ogni carattere nel suo corrispettivo minuscolo,ma l'esercizio dice di lasciare invariate le maiuscole e le minuscole...Quindi se io scrivo "Ciao" la parola dovrà rimanere tale,e se magari decido di sostituire le "a" con le "o" la parola in uscita dovrà essere "Cioa"... Che esercizio della minchia!
  • Re: Creazione di un FILE

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        FILE *fi , *fo ; /* Puntatori a File Input e File Output */
        char nomefile[40], modo[2], stringa[51], cScambio[3] ;
        int k = 1 , fine = 0 ;
        
        while ( fine == 0 )
        {
            fflush(stdin);
            printf("\nInserire il nome del file che si vuole creare : ");
            gets(nomefile);
            printf("\nDigitare la lettera \'w\' per creare il file in modo \"Scrittura\" : ");
            gets(modo);
              
            if ( ( fi = fopen( nomefile, modo )) != NULL )
            {
                printf("\nIl file %s e' stato creato in modo corretto!",nomefile);
                printf("\n\nInserire il testo da salvare nel file creato : ");
                gets(stringa);
                fprintf( fi , "%s ", stringa );
                printf("\nPremere \"1\" per Terminare o \"0\" per inserire altro testo : ");
                scanf("%d",&fine);
                   
            }
            
            else /* Nel caso il file non venga creato/aperto in maniera corretta */
            {
                printf("\nErrore di apertura!\n");
                getche();
                fclose(fi);
                  
            }
        }
        
        fflush(stdin);
        printf("\nDigitare due lettere\nche verranno invertite nel testo precedentemente inserito : ");
        gets(cScambio);
        printf("\ncScambio[1] = %c\n",cScambio[0]);
        printf("\ncScambio[2] = %c\n",cScambio[1]);
        getche();
        
        int i = 0 ;
        
        do
        {
            stringa[i];
            
            if ( stringa[i] == cScambio[0] )/* Scambio la prima lettera inserita con la seconda */
            {
                stringa[i] = cScambio[1];
                fprintf(fi, "%c", stringa[i] );
                i++ ;
                
            }
            
            if ( stringa[i] == cScambio[1] )/* Scambio la seconda lettera inserita con la prima */
            {
                stringa[i] = cScambio[0];
                fprintf(fi, "%c", stringa[i] );
                i++ ;
                
            }
            
            if ( stringa[i] != cScambio[0] && stringa[i] != cScambio[1] )
            {
                fprintf(fi, "%c", stringa[i] );
                i++ ;
                
            }    
            
        }while( stringa[i] != '\0');
        
        k = fclose(fi);
        
        if ( k == 0 )/* Controllo che il file di testo venga chiuso correttamente */
        {
            printf("\n\n\t\t\t\tFINE ESERCIZIO!\n ");
            getche();
            return 0 ;
            
        }
        
        else
        printf("\nErrore di chiusura del file di testo creato!\n\n");
                
    }
    Questo è ciò che ho pensato! l'ho appena provato e funziona! Se qualcuno ha dei suggerimenti,obbiezioni o migliorie da apportare ben venga !
Devi accedere o registrarti per scrivere nel forum
5 risposte