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++ - Trasformazione da file csv a file binario
Forum - C/C++ - Trasformazione da file csv a file binario

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:18
Sabato, 29/07/2017
Salve, praticamente devo trasformare un file csv in file binario. L'idea è quella di leggere ogni record del file csv, che è diviso in campi separati da un ; e di memorizzare ogni campo in una struct e poi di memorizzare questa struct in un nuovo file binario.
Questo è il codice:
Codice sorgente - presumibilmente C++

  1. struct Admin{
  2.         unsigned int IdUtenti;
  3.         char Nome[20];
  4.         char Cognome[20];
  5.         char Username[20];
  6.         char Password[20];
  7.         char Email[50];
  8.         char Cellulare[10];
  9. };
  10.  
  11. csv=fopen("Admin.csv", "r");
  12.         ADMIN=fopen("Admin.dat","ab+");
  13.  
  14.                 fscanf(csv, "%[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]", &a.IdUtenti, a.Nome, a.Cognome, a.Username,a.Password, a.Email, a.Cellulare);
  15.                 fwrite(&a, sizeof(struct Admin),1, ADMIN);
  16.                         while(fgets(line,1024,csv)){
  17.                     fscanf(csv, "%[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]",  &a.IdUtenti, a.Nome, a.Cognome, a.Username,a.Password, a.Email, a.Cellulare);
  18.                     fwrite(&a, sizeof(struct Admin),1, ADMIN);
  19.                 }
  20.  
  21.         fclose(csv);
  22.         fclose(ADMIN);



vi lascio qui l'output:
in allegato
come mai mi esce questo ? :-|:-|:-|


perillitommaso ha allegato un file: 5e11b86f-7f1b-4249-93ca-c0bfccd43267.jpg (123396 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da perillitommaso il 29/07/2017 alle 20:35
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:24
Sabato, 29/07/2017
Ti "esce" cosa?

Il link non funziona ...

E poi, perché nel ciclo leggi due volte, una volta con la fgets e l'altra con la fscanf ?

Ultima modifica effettuata da nessuno il 29/07/2017 alle 20:32


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
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:36
Sabato, 29/07/2017
Scusami, pensavo funzionasse. Adesso ho messo in allegato la foto, la puoi vedere?
Comunque la fgets dovrebbe funzionare come la feof no?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:39
Sabato, 29/07/2017
No .. la fgets legge da file, la feof serve a controllare se il file è terminato.
Non sono la stessa cosa, altrimenti non esisterebbero due funzioni. E se hai questi dubbi, ti consiglio di rivedere la documentazione.


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
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:47
Sabato, 29/07/2017
so che non sono la stessa cosa, quindi dovrei mettere la feof al posto della fgets ? hai visto l'output?

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 20:51
Sabato, 29/07/2017
Ho messo la feof al posto della fgets e mi va in loop

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:13
Sabato, 29/07/2017
Qual è il codice adesso? Completo di main ...


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
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 22:23
Sabato, 29/07/2017

Codice sorgente - presumibilmente C++

  1. struct Admin{
  2.         unsigned int IdUtenti;
  3.         char Nome[20];
  4.         char Cognome[20];
  5.         char Username[20];
  6.         char Password[20];
  7.         char Email[50];
  8.         char Cellulare[10];
  9. };
  10.  
  11. csv=fopen("Admin.csv", "r");
  12.         ADMIN=fopen("Admin.dat","ab+");
  13.  
  14.                 fscanf(csv, "%u; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]", &a.IdUtenti, a.Nome, a.Cognome, a.Username,a.Password, a.Email, a.Cellulare);
  15.                 fwrite(&a, sizeof(struct Admin),1, ADMIN);
  16.                         while(!feof(csv)){
  17.                     fscanf(csv, "%u; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]; %[^;]",  &a.IdUtenti, a.Nome, a.Cognome, a.Username,a.Password, a.Email, a.Cellulare);
  18.                     fwrite(&a, sizeof(struct Admin),1, ADMIN);
  19.                 }
  20.  
  21.         fclose(csv);
  22.         fclose(ADMIN);



questo qui

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:01
Sabato, 29/07/2017
L'ultimo campo nel file csv termina con il ; ?

Mostra una linea del csv


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
Pagine: [ 1 2 ] Precedente | Prossimo