Newsgroup: it.comp.lang.c
Titolo: Consigli

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

 fprintf, oppure fputs.
sï¿œ.
E.

 E.
non ho capito. :-)
Ciao

 non ho capito. :-)
E' piuttosto chiaro: tu hai fatto una domanda e alcune affermazioni,
lui ha risposto si alla tua domanda! ;)
ciao
Giacomo

 Giacomo
per ottenere un puntatore/indirizzo alla riga di testo
ricercata, come si f�? :-)
Grazie
Ciao

 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,...

testo" direi che sei ancora alla fase 1....
quasi.
Ciao

 posso fare un rewind?
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

 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

 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.

 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

 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.

Non mi ricordo se e' possibile, ma se il tuo sistema operativo
supporta la mappatura di file in memoria, potresti cavartela con delle
memmove().
Bisogna provare sul tuo S.O.

 g.
... come lavorano, gli editor di testo?
Io utilizzo Win32pad e Wordpad. :-)
Ciao

guarda questa pagina che ho trovato in rete:
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

 come lavora questo programma.
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.

quel programma e di una Universit�!
ok, grazie.
Ciao