Esercizio su file

di Anonimizzato19537 il
14 risposte
Salve a tutti ho un esercizio in cui deve leggere su file dei campi che sono data(gg/mm/aaaa); negozio; prezzo
usando argc e argv, quando vado a compilare se inserisco ./a.out -, sostituisce gli / con - e le ; con la ,
come posso fare ciò? devo usare la tabella ascii, un po come si fa per i caratteri?

14 Risposte

  • Non ho capito nulla ...

    Che c'entra il file con la linea di comando?
  • Scrivere un programma che permetta di analizzare l’estratto conto delle spese effettuate con una carta di credito, registrati in un file con il seguente formato.

    03-01-2016;IKEA IT;-32.20
    07-01-2016;Rimborso missione;47.00
    14-02-2016;Amazon Mktplce EU-IT LU;-19.50
    24-02-2016;DECATHLON ITALIA SRL IT;-118.07
    26-05-2016;AUTOSTRADA CASELLO IT;-0.90

    Ogni linea include, separati dal carattere ‘;’ i seguenti campi: la data dell’operazione (formato gg-mm-aaaa), la descrizione della spesa e l’importo (negativo in caso di addebito, positivo in caso di accredito) dell’operazione. Le linee sono ordinate per data. Si scriva un programma in C che

    1. Se lanciato con una sequenza di due caratteri, li interpreti rispettivamente come separatore di data e separatore di campo e stampi in output e su un file chiamato estratto1.txt il file con i separatori modificati.

    > ./a.out /,
    3/1/2016,IKEA IT,-32.20
    7/1/2016,Rimborso missione,47.00
    14/2/2016,Amazon Mktplce EU-IT LU,-19.50
    24/2/2016,DECATHLON ITALIA SRL IT,-118.07
    26/5/2016,AUTOSTRADA CASELLO IT,-0.90
  • Adesso è più chiaro.

    Molto banalmente, scorri tutti i singoli elementi della stringa (sono i char che la compongono) e confronta con ognuno dei caratteri separatori letti dalla linea di comando per sostituirli. Saprai che una stringa è un vettore di char ...

    Dipende anche da quali funzioni avete studiato sulle stringhe ultimamente, magari dovete applicare quelle.
  • Forse ho capito sei un grande oregon come sempre, grazie mille
  • Che funzioni potrei usare?
  • Strtok
    strchr

    per suddividere, cercare ... ma forse un ciclo è più sbrigativo.
  • Ok grazie mille ancora
  • Io ho scritto cosi però se quando vado a compilare scrivo ./a.out mi sostituisce i caratteri a c...i suoi perchè?
    
    if(*argv[1]>='!' && *argv[1] <='/')
     {
        while(fgets(riga, 100, fp)) {
        
          fscanf(fp, "%c", riga);
          
    	for(int i=0; riga[i]!='\0'; i++) {
    	
                if(riga[i]>='!' && riga[i]<='/') {
                
    	       fprintf(fp, "%c", riga[i]=*argv[1]);
                }
           }
         }
       
      }
    
  • Leggi dal file originale tutte le linee, correggile in memoria e poi riscrivi le linee sul file.

    Oppure, leggi dal file originale, correggi una linea per volta e scrivila in un altro file. Alla fine, cancelli l'originale e rinomini il nuovo.
  • Allora io nel frattempo ho provato ad usare la strtok e ho fatto cosi
    
    while(fgets(riga, 100, fp))
    {
         p=strtok(riga, ";");
         for(; *p!='\0'; *p++)
         {    
            if(*p>='!' && *p<='/')
            {
               fprintf(fp, "%c", *p=*argv[1]);
            }
    
            printf("%c", *p);
         }
         printf("\n");
    }
    
    se mando in output sullo stdout, e quindi levo la fprintf nell'if e scrivo solo *p=*argv[1]; l'output è corretto. mentre con la fprintf mi da come output sul file questo:
    03-01-2016;IKEA BARONISSI IT;-32.20
    //-01-2016;Rimborso missione;47.00
    //-02-2016;Amazon Mktplce EU-IT LU;-19.50
    //-02-2016;DECATHLON ITALIA SRL IT;-118.07
    //-05-2016;AUTOSTRADA CASELLO IT;-0.90
    //
  • Per scrivere nello stesso file da cui leggi devi spostare prima il puntatore indietro con una fseek. Come ti ho detto prima, più semplicemente puoi usare un secondo file.
  • Ci sto provando in tutti i modi con fseek ma proprio non riesco a capirlo.
  • Perché vuoi seguire la strada più difficile?
  • oregon ha scritto:


    Perché vuoi seguire la strada più difficile?
    Credo che hai ragione provo a scrivere su un nuovo file grazie ancora una volta oregon
Devi accedere o registrarti per scrivere nel forum
14 risposte