Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Consigli

0 views
Skip to first unread message

news.tiscali

unread,
Nov 30, 2009, 3:02:51 PM11/30/09
to

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

?manu*

unread,
Nov 30, 2009, 3:30:56 PM11/30/09
to
news.tiscali ha scritto:
> 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.

sᅵ.

E.

news.tiscali

unread,
Nov 30, 2009, 4:38:37 PM11/30/09
to
?manu* wrote:
> news.tiscali ha scritto:
>> 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.
>
> s�.
>
> E.

non ho capito. :-)


Ciao


Giacomo Degli Esposti

unread,
Dec 1, 2009, 4:08:00 AM12/1/09
to
On 30 Nov, 22:38, "news.tiscali" <n...@tiscali.nospam> wrote:
> ?manu* wrote:
> > news.tiscali ha scritto:
> >> 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.
>
> > sì.

>
> > E.
>
> non ho capito. :-)

E' piuttosto chiaro: tu hai fatto una domanda e alcune affermazioni,
lui ha risposto si alla tua domanda! ;)

ciao
Giacomo

news.tiscali

unread,
Dec 1, 2009, 6:19:28 AM12/1/09
to
>>
>> non ho capito. :-)
>
> 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


g.r...@iit.cnr.it

unread,
Dec 1, 2009, 6:44:53 AM12/1/09
to
On Dec 1, 12:19 pm, "news.tiscali" <n...@tiscali.nospam> wrote:

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

news.tiscali

unread,
Dec 1, 2009, 7:01:23 AM12/1/09
to

<g.r...@iit.cnr.it> ha scritto nel messaggio
news:49bf8052-7bc6-4929...@o10g2000yqa.googlegroups.com...

On Dec 1, 12:19 pm, "news.tiscali" <n...@tiscali.nospam> wrote:

> 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

remod

unread,
Dec 1, 2009, 3:45:50 PM12/1/09
to
news.tiscali ha scritto:
> <g.r...@iit.cnr.it> ha scritto
>> Non mi risulta che si poss "aggiungere" linee
>> nel mezzo di un file.
>
> 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

news.tiscali

unread,
Dec 1, 2009, 4:15:02 PM12/1/09
to
>
> 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

Giovanni Resta

unread,
Dec 1, 2009, 4:39:26 PM12/1/09
to
news.tiscali wrote:

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

news.tiscali

unread,
Dec 2, 2009, 3:14:15 AM12/2/09
to
> 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

g.r...@iit.cnr.it

unread,
Dec 2, 2009, 3:23:22 AM12/2/09
to
On Dec 2, 9:14 am, "news.tiscali" <n...@tiscali.nospam> wrote:
> > 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.

fnegroni

unread,
Dec 2, 2009, 6:12:31 AM12/2/09
to
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.

news.tiscali

unread,
Dec 2, 2009, 10:09:38 AM12/2/09
to
>
> 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


news.tiscali

unread,
Dec 2, 2009, 10:15:34 AM12/2/09
to
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


g.r...@iit.cnr.it

unread,
Dec 3, 2009, 4:25:02 AM12/3/09
to
On Dec 2, 4:15 pm, "news.tiscali" <n...@tiscali.nospam> wrote:
> guarda questa pagina che ho trovato in rete:
>
> http://www.dis.uniroma1.it/~progc/programmi/liste/esami/gestesti.c
> 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.

news.tiscali

unread,
Dec 3, 2009, 3:27:53 PM12/3/09
to
quel programma e di una Universit�!

ok, grazie.


Ciao

0 new messages