Newsgroup: it.comp.programmare.win32
Titolo: Modificare contenuto file di testo

Ho un file di testo, vorrei cambiare una parola con un altra .
Come si può fare?
Ho provato a dare un'occhiata alla classe CFile e alle sue funzioni, ma non
mi è chiaro come faccio a spostarmi all'interno del file di un certo numero
di righe, cancellare ciò che c'è scritto e sostituirlo con ciò che voglio
io...
Ad esempio se dovessi modificare la scritta pippo con pluto, come potrei
fare, ammesso che il file di testo sia così strutturato?
campo1="uno"
campo2="due"
campo3="tre"
campo4="pippo"
Da caso a caso la lunghezza delle righe campo1,2 e 3 possono cambiare, per
questo mi servirebbe spostarmi per righe e non per caratteri, in quanto so
che campo4 è sicuramente alla riga 4, mentre non so a che numero di
carattere può iniziare la scritta "pippo" da modificare...
Spero di essere stato chiaro... :-)
-- 
(-:  Enjoy!  :-)
------
XplodR
------
e-mail: 
NO-SPAM-...@inwind.it
     TOGLIERE NO-SPAM-2- X RISPONDERE
ICQ: 11938825 (XplodR)
--===--
FAQ sulla masterizzazione
http://www.cdrfaq.tk
http://cdrfaq.sytes.net

Prova ad utilizzare CArchive::ReadString e CArchive::WriteString;
dall'MSDN non si capisce bene a cosa servano esattamente, ma da quanto ho
capito io lavorano su singole linee di testo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 capito io lavorano su singole linee di testo.
Scrive stringhe in "archivi" binari... Non proprio un'ottima 
soluzione... :-PPPPPPPPPP 
PS: per exploder, leggiti tutto il file in memoria (es in un 
CStringArray) linea per linea, e lavora li dentro. E' la cosa più 
semplice, usando CStdIoFile.
-- 
Luc

 io...
Se il file non è di dimensioni "enormi", puoi leggerlo con gli stream
standard e le stringhe (std:string), e operare su queste.
Se invece puoi appoggiarti ad un altro file, usi comunque gli stream della
libreria standard, leggi parola dopo parola, quando trovi una parola da
modificare , la scrivi modificata, altrimenti la scrivi tale e quale.

 io...
Leggi il file, riga per riga, fai la sostituzione in memoria nella riga 
e la scrivi in un'altro file.

 modificare , la scrivi modificata, altrimenti la scrivi tale e quale.
Usa il primo metodo, dato che il secondo ti cambia la formattazione del
testo! Non ci avevo pensato...
Ti faccio un piccolo esempio... giusto come idea...
ciao...
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;
// funzione che sostituisce testo in una stringa...
string& replaceAll(string& context, const string& from,const string& to)
{
        size_t foundHere,lookHere = 0l;
        while ((foundHere = context.find(from, lookHere)) != string::npos)
        {
                context.replace(foundHere, from.size(), to);
                lookHere = foundHere + to.size();
        }
        return context;
}
int main()
{
        string source,dest;
        cout << "Inserisci una parola da sostituire ? ";cin >> source;
        cout << "Inserisci la parola sostituta ? ";cin >> dest;
        cout << "Ora scrivi un testo:\n";
        ostringstream out;
        string temp;
        // legge una dopo l'altra le linee di testo dall'input e le riscrive
        // sostituendo a source, dest !
        while(getline(cin,temp) ) out << replaceAll(temp,source,dest) <<
endl;
        cout << "\nEcco il testo modificato:\n";
        cout << out.str() << endl;
        system("pause");
        return 0;
}

 standard e le stringhe (std:string)
Si, ma se programma MFC è meglio usare le classi MFC, no? 
-- 
Luc

Sono riuscito a fare qcs con la cstdiofile.
arrivo alla riga che mi interessa e la sostituisco con la stringa che
voglio, e fin qui funziona tutto bene.
Il problema nasce se la stringa da sostituire è più lunga di quella nuova,
perché non viene sostituita tutta la riga.
esempio
se sostituisco campo1="telefono" con campo1="casa" nel file, quello che
ottengo è
campo1="casa"ono"
Quindi, esiste un modo, una espressione regolare che faccia come il tasto
"canc" o al limite come backspace?
Grazie x le dritte fornitemi finora, se trovate anche questa siete degli
eroi! :-)


 "canc" o al limite come backspace?
Questa richiesta dimostra che hai gravi lacune nell'utilizzo dei file. 
Come ti è già stato detto è meglio leggere tutto in memoria, modificare 
e poi riscrivere tutto da zero. 
-- 
Luc

 e poi riscrivere tutto da zero.
Ok fatto mettendo tutto in memoria e scrivendo su un nuovo file, ora
funziona!
Grazie


 ha scritto nel messaggio
news:MPG.1b97a27b...@tornado.fastwebnet.it...


non so... personalmente non sono d'accordo... comunque ognuno faccia come
crede.