Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema salvataggio file di testo in CSV
Forum - C/C++ - Problema salvataggio file di testo in CSV

Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 14:52
Giovedì, 08/05/2014
Salve, sto usando i file csv per archiviare le entrate e uscite che faccio io mensilmente..
unica cosa che ho un problema e quando salvo il file e se la motivazione c'è scritto:

Biglietto da visita per gruppo di socializzazione..

in poche parole mi salva solo la prima scritta ovvero  "biglietto".

come mai?

vi posto il codice Salva_nel_db i parametri dove salvo sono tutti char[256] in un file H.

e li prendo con un scanf("%s", etc). in un'altro file .c

ecco:
Codice sorgente - presumibilmente C++

  1. void salva_nel_db(char *data, char *motivazione, char *tipo, char * importo)
  2. {
  3.         char nomefile[]="database.csv";
  4.         FILE * Fp1;
  5.        
  6.         Fp1 = fopen(nomefile, "a");
  7.         if (Fp1==NULL){
  8.                 printf("File %s not found\n", nomefile);
  9.                 exit(-1);
  10.         }
  11.         fprintf(Fp1, "%s;%s;%s;%s\n", data, motivazione, tipo , importo);
  12.        
  13.         rewind(Fp1);
  14.        
  15.         fflush(Fp1);
  16.         fclose(Fp1);
  17.        
  18.         printf("\n Salvato..\n");
  19.         Pause();
  20. }



idee?

grazie mille e buona giornata.

Ultima modifica effettuata da Marte111 il 08/05/2014 alle 14:54
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:46
Giovedì, 08/05/2014
Come fai l'input della stringa?

Non puoi usare la scanf ma dovrai usare la fgets con input da stdin


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 16:10
Giovedì, 08/05/2014
guarda, io uso questo codice:

Codice sorgente - presumibilmente C/C++

  1. void input_inserimento()
  2. {
  3.                 printf("Inserire data: ");
  4.                 scanf("%s",data);
  5.                 fflush(stdin);
  6.                 printf("Inserire Motivazione: ");
  7.                 scanf("%s", motivazione);
  8.                 fflush(stdin);
  9.                 printf("Inserire Entrate o Uscita:  ");
  10.                 scanf("%s", tipo);
  11.                 fflush(stdin);
  12.                 printf("Inserire Importo:  ");
  13.                 scanf("%s", importo);
  14.                 fflush(stdin);
  15. }



Codice sorgente - presumibilmente C/C++

  1. void inserimento()
  2. {
  3.         char finito;
  4.         finito='n';
  5.        
  6.         while((finito=='n') || (finito=='N'))
  7.         {
  8.                 Clear();
  9.                 input_inserimento();
  10.                 salva_nel_db(data,motivazione,tipo,importo);
  11.        
  12.                 printf("Finito? S(i) oppure N(o) --> ");
  13.                 scanf("%c", &finito);
  14.        
  15.         }
  16. }



come posso usare fgets  come dici tu ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:20
Giovedì, 08/05/2014
La scanf non accetta una frase ma solo una parola.

Devi usare la fgets così

fgets(motivazione, 255, stdin);


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 17:01
Giovedì, 08/05/2014
Testo quotato

Postato originariamente da nessuno:

  



ho provato e funziona.. ma l'unico problemino e che nel file .csv mi va a capo dopo la motivazione:

Codice sorgente - presumibilmente Plain Text

  1. 1;20-01-2015;Sito Web - Realizzato
  2. ;e;200,00



come mai?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:27
Giovedì, 08/05/2014
Perché la fgets aggiunge un ritorno a capo alla fine della stringa. Eliminalo subito dopo aver usato la fgets.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote