Devo trovare in un file.txt, una riga x, mettiamo, 1� riga,
e devo scrivere sotto questa riga dopo 2 \n. Cosa utilizzo
per leggere e trovare la riga, fgets?, per scrivere, utilizzo
fprintf, oppure fputs.
Si accettano consigli.
Grazie
Ciao
sᅵ.
E.
non ho capito. :-)
Ciao
E' piuttosto chiaro: tu hai fatto una domanda e alcune affermazioni,
lui ha risposto si alla tua domanda! ;)
ciao
Giacomo
per ottenere un puntatore/indirizzo alla riga di testo
ricercata, come si f�? :-)
Grazie
Ciao
> per ottenere un puntatore/indirizzo alla riga di testo
> ricercata, come si fà? :-)
Visto che non ti risponde piu' nessuno e
in attesa di suggerimenti migliori:
hai bisogno di due FILE,
tipo FILE *f_in , *f_out;
da uno leggi, nell'altro scrivi.
Non mi risulta che si poss "aggiungere" linee
nel mezzo di un file.
Leggi f_in fino a che c'e' bisogno, buttando quello che leggi
in f_out.
Arrivato ad un certo punto aggiungi quello che devi aggiungere
in f_out e poi continui a copiare i due file da f_in a f_out.
Alla fine cancelli il file vecchio e tieni (e rinomi se necessario)
quello nuovo.
per quel che riguarda leggere linea per linea
hai due modi principali (poi ti diranno meglio di modi piu'
sicuri e portabili):
se non sai a priori quanto puo' essere lunga una
riga di testo allora puoi leggere un carattere alla
volta e capisci di aver letto una riga quando arrivi
al carattere/i che sul tuo sistema operativo segnala/no
la fine di una riga e a capo. La cosa e' diversa a seconda
se usi linux/win/mac.
(nota: se usi windows devi di solito aprire i file come
file di testo ("rt" o "wt") o almeno ai miei tempi era cosi'...
alternativamente, se sai a priori quanto e' lunga al massimo una riga,
puoi allocare un buffer di grandezza opportuna
e poi leggere una riga alla volta con la funzione
fgets che ti semplifica la vita.
comunque, la procedura di solito e' questa
1) ti studi le varie funzioni per aprire, chiudere,leggere da ,
scrivere in, files.
2) scrivi il programma
3) se qualcosa non ti funziona, torni a chiedere.
dalla domanda "come faccio ad ottenere un puntatore alla riga di
testo"
direi che sei ancora alla fase 1....
giovanni
--
http://www.iread.it : anagrammi, criptaritmi, polimini,...
> per ottenere un puntatore/indirizzo alla riga di testo
> ricercata, come si f�? :-)
>Visto che non ti risponde piu' nessuno e
>in attesa di suggerimenti migliori:
>Non mi risulta che si poss "aggiungere" linee
>nel mezzo di un file.
posso fare un rewind?
>la fine di una riga e a capo. La cosa e' diversa a seconda
>se usi linux/win/mac.
Win/Mingw
>dalla domanda "come faccio ad ottenere un puntatore alla riga di
>testo" direi che sei ancora alla fase 1....
quasi.
Ciao
Se apri il file con "r+" puoi spostarti avanti e indietro sul file con
fseek() ma non puoi "inserire" (cioᅵ spostare "in avanti" il contenuto
del file da un certo punto in poi).
Segui il consiglio di Giovanni, mi sembra la cosa piu' semplice da fare.
Remo.D
ti ringrazio. Ma comunque, non e possibile, trovare una riga
sequenza di caratteri, e con il puntatore *fp, utilizzarlo per
scrivere pi� sotto. Il file si apre in formato append.
Grazie
Ciao
> ti ringrazio. Ma comunque, non e possibile, trovare una riga
> sequenza di caratteri, e con il puntatore *fp, utilizzarlo per
> scrivere pi� sotto. Il file si apre in formato append.
Il formato append ti permette di aggiungere roba (append) in fondo ad un
file.
Non c'e' modo di "inserire" roba in mezzo ad un file, neanche
se lo apri in lettura+scrittura.
Puoi sovrascrivere una parte di un file, aggiungere roba in fondo, ma
non puoi togliere o aggiungere roba in mezzo.
Il motivo dipende da come sono memorizzati tipicamente i file sul disco.
Se non ti fidi puoi controllare sul tuo manuale.
g.
insomma non c'� un modo per scrivere, in che formato, non lo s�!,
ma non e possibile scrivere in un file, tramite un puntatore *fp in
un riga x dello stesso stesso file, fare uno scroll in basso, e scrivere
una riga di testo. Non e possibile fare le cose come quando si apre
un file con editor di testo, dove si posiziona il cursore dove si vuole.
Grazie
Mi sembra che questa sia la 3a volta che te lo dico: NON PUOI FARE
QUELLO CHE CHIEDI nel modo semplicistico in cui vorresti farla.
Devi scriverti una funzione opportuna e questa funzione avra' bisogno
di aprire due file, uno attraverso il quale leggi il file originale, e
l'altro
attraverso il quale andrai a scrivere il nuovo file modificato.
Quello che vuoi fare tu si puo' fare solo con
poche istruzioni solo se
1) le righe che aggiungi sono in fondo al file, oppure se
2) le righe non vengono aggiunte in mezzo al file ma
sovrascrivono (esattamente) materiale gia' presente.
Cioe',
da un file con scritto:
TOPOLINO
PIPPO
PLUTO
puoi ottenere facilmente il file
TOPOLINO
PIPPO
PLUTO
BASETTONI
oppure il file
TOPOLINO
MORTE
PLUTO
ma non
TOPOLINO
PIPPO
GIUSEPPE TUBI
PLUTO
Ovviamente poi (cosi' come fanno gli editor di testo...) puoi fare
tutto, ma non bastano 3 istruzioni.
g.
... come lavorano, gli editor di testo?
Io utilizzo Win32pad e Wordpad. :-)
Ciao
http://www.dis.uniroma1.it/~progc/programmi/liste/esami/gestesti.c
come lavora questo programma. Ho provato ha compilarlo c'� qualche errore di
sintassi.
L'ho messo a posto, ma ora, non ricordo di cosa si trattava esattamente, gli
erorri
erano tra le righe 170 e 230.
Ciao
Il programma in oggetto fa (volutamente) schifo, anche perche'
non e' una reale applicazione ma un esercizio sulle liste,
(che nel tuo caso servono a ben poco).
il tuo programma e' una cosa banale e molto piu' corta:
* apri in lettura il file da modificare FileA
* apri in scrittura un file temporaneo FileT
* leggi una riga alla volta dal FileA e la scrivi nel FileT
* se la tua condizione sulla riga corrente e' verificata scrivi nel
FileT quello che volevi
aggiungere
* continui a leggere una riga da FileA e scriverla in FileT fino alla
fine del FileA.
* chiudi tutti due i file
* cancelli il FileA (o lo rinomini e lo tieni come backup...)
* rinomini il FileT in modo che diventi il FileA
Questa e' la traccia. Il programma vero e proprio sara'
lungo il doppio o poco piu'.
Modificare quel programma che hai linkato in modo che faccia
quello che vuoi e' molto piu' complicato.
g.
ok, grazie.
Ciao