|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
[C] leggere \n da un file .txt
ciao a tutti!
qualcuno sa se è possibile leggere i \n presenti in un file di testo? cioè io ho bisogno di leggere delle stringhe presenti in un file di testo (uno la funzione fscanf) ma avrei bisogno di leggere anche quando il testo va a capo (e purtroppo fscanf lo ignora).. c'è un modo per farlo?? grazie mille a tutti !
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
si me lo ricordavo che fgets leggeva anche il \n, però non so se nel mio caso si adatta a quello che voglio fare: allora cerco di spiegarti bene cosa voglio fare cosi mi puoi dire se è possibile
allora io devo leggere parole per parole un testo scritto in un file ( e le leggo come ho già detto con fscanf) poi devo controllare se la parole letta è presente in un altro file e, in caso affermativo, devo sostituirla con un'altra, altrimenti tengo la stessa.. in pratica devo sostituire le parole di un brano con delle altre, e salvare il testo ottenuto in un terzo file.. quello che vorrei fare io è "salvare" anche la formattazione del file di testo originario, perchè cos' come ho fatto ora il mio programma le parole mi vengono scritte tutte una di seguito all'altra.. c'è un modo per poter fare quello che desidero??
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Torino
Messaggi: 752
|
Puoi provare a usare una cosa del genere:
int ncaratteri=0, int r=0, int n; fgets(buffer,N,primofile); do{ r=sscanf(buffer[ncaratteri],"%s%n",parola,&n); ncaratteri=ncaratteri+n; } while(r==1); così leggi una riga da primofile e la metti in buffer \n compreso, poi leggi dal buffer parola per parola (in n hai il numero di caratteri letti, che sommi ad ncaratteri in modo da partire a leggere la parola partendo dal punto giusto, e non di nuovo dall'inizio) fino a quando sscanf legge qualcosa (sscanf ritorna il numero di parole lette). Esci così dal ciclo quando trova il \n. fai sapere se funziona che non l'ho mai provata questa cosa cià
__________________
ubuntulinux | Windows 7
Trattato con: enghel | thunder01 | char66 | siemens | topogatto | ::tony design | alcol | mammabell | uazzamerican | niko0 | oldfield | |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
ok adesso lo provo
ho solo alcuni dubbi.. in fgets, io non so che valore ad attribuire ad N, perhcè non so quanto sarà lunga la riga, gli do un valore sovradimensionato?? e %n che tipo indica?? il \n ? scusa ma cosa cambia da sscanf a fscanf?? grazie mille!!
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#6 | |||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|||
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
ok grazie per i chiarimenti
Ora provo il codice poi vi dico^
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Torino
Messaggi: 752
|
Quote:
sscanf = "string scanf", cioè è come una comune scanf ma invece da leggere da video leggi da una stringa (cioè un vettore) %n -> writes into the argument the number of characters read so far by this call; int *. No input is read. The converted item count is not incremented. -> in pratica %n è un particolare tipo che permette di contare i caratteri letti da una scanf (o fscanf o sscanf che sia). Dopodichè questo numero lo memorizzi in un intero col solito metodo &variabile. In effetti se non sai quanto è lunga una riga dovresti sovradimensionare N...oppure usare un ciclo leggendo carattere per carattere, cioè qualcosa del tipo char parola[MAXPAROLA]; //........ ncarattere=0 do { fscanf(nomefile,"%c",parola[ncarattere]); ncarattere++; } while ( (parola[ncarattere-1]!=' ') || (parola[ncarattere-1]!='\n') ); /*ho letto una parola e al fondo del vettore parola ho o uno spazio od un \n. Non ho il terminatore di stringa, per cui se serve lo aggiungo manualmente così: parola[ncarattere]='\0'; Quando andrò a stampare questa parola, basta stampare con una fprintf(nomefile,"%s",parola); dato che così stampa fino al '\0', compreso lo spazio o il a capo, in base a che parola ho letto!*/ In effetti forse così è anche più simile a quello che avevi fatto tu...credo
__________________
ubuntulinux | Windows 7
Trattato con: enghel | thunder01 | char66 | siemens | topogatto | ::tony design | alcol | mammabell | uazzamerican | niko0 | oldfield | |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Torino
Messaggi: 752
|
Eh, sono arrivato un po' in ritardo
__________________
ubuntulinux | Windows 7
Trattato con: enghel | thunder01 | char66 | siemens | topogatto | ::tony design | alcol | mammabell | uazzamerican | niko0 | oldfield | |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
ri_grazie per i consigli e le info
oggi se riesco provo ad implementare il codice!
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:33.



















