|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[c] assegnare valori alle variabili da file di testo
sto facendo una rubrica ma ho un problema..
per salvare nel file uso fprintf(fp,"%s %s %s ",s[j].nome,s[j].cognome,s[j].numero) ma quando ho bisogno di passarle alle variabili non posso usare ne fscanf(fp,"%s%s%s",&s[j].nome,&s[j].cognome,&s[j].numero) perchè se poi nel nome o nel cognome ci sono spazi me li tronca e sballa tutto ne fgets perchè non posso sapere a priori quanto sono lunghe le stringhe. possono essere massimo di 14 caratteri + fine stringhe ma anche meno e non posso saperlo.. qualcuno può aiutarmi? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ci sono diverse strategie in questo caso:
- fai dei campi di dimensione fissa - usi dei separatori Per fare campi di dimensione fissa: Supponiamo che nome cognome e numero abbiano dimensione massima 30 caratteri + il fine stringa (quindi 31). fprintf(fp,"%30s%30s%30s",s[j].nome,s[j].cognome,s[j].numero); In questo modo ti aggiunge automaticamente degli spazi fino a riempire i 30 caratteri... In lettura operi con fgets mettendo come limite di dimensione appunto 30 per ogni campo. Per i separatori: Ad esempio puoi usare un carattere (ad esempio la virgola o il pipe) come separatore: fprintf(fp,"%s,%s,%s",s[j].nome,s[j].cognome,s[j].numero); Dopo per la lettura puoi leggerti su una stringa la riga intera e poi separarla con dei semplici passaggi (o con strtok o con qualche algoritmo di tua invensione)... |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Comunque puoi innanzitutto scrivere le stringhe separate da un certo carattere speciale, per esempio il tab: fprintf(fp,"%s\t%s\t%s\t",....... Quindi ti basta leggere la riga con fgets ma se come ho capito io hai tutto su 1 riga, allora potresti usare una funzione come quella che ho postato in <questo> thread, che è in grado di leggere una riga di lunghezza arbitraria. Dopodiché spezzi la stringa usando strtok, mettendo come delimitatore il tab \t.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
ho capito l'errore.. sballa tutto perchè nel file ignora gli spazi all'inizio, prima della prima stringa.. come posso rimediare a questo?
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:38.




















