Salve a tutti
Vorrei sapere come fare, una volta assegnato uno stream al file ecc. a leggere e scrivere su\da 2 o più variabili int o double.
grazie
popoxxx
Salve a tutti
Vorrei sapere come fare, una volta assegnato uno stream al file ecc. a leggere e scrivere su\da 2 o più variabili int o double.
grazie
popoxxx
Forse non mi sono spiegato bene.
Ho un file, chiamiamo per esempio prova.txt, vi accedo da un programma C++ assegandolo ad uno stream che possiamo ad esempio chiamare file.
Dichiaro inoltre, per esempio 2 variabili int.
adesso come faccio leggere le due variabili dal file (dove ad esempio ci sarà scritto 2 15 e allora x dovrà valere 2 e y 15), elaborarle e poi rimandarle nel file?#include <iostream>
#include <fstream>
using namespace std;
int main() {
int x;
int y;
fstream file;
file.open("prova.txt");
if(!file) {
cout << "Errore nella lettura del file prova.txt";
return 1;
}
grazie
popoxxx
Per leggerle
Poi le puoi elaborare, ma per scriverle nuovamente, devi usare un altro file ...codice:file >> x >> y; file.close(); cout << x << " " << y << endl;
ma ehm dipende come e fatto il file, per es se fosse fatto cosiOriginariamente inviato da popoxxx
Forse non mi sono spiegato bene.
Ho un file, chiamiamo per esempio prova.txt, vi accedo da un programma C++ assegandolo ad uno stream che possiamo ad esempio chiamare file.
Dichiaro inoltre, per esempio 2 variabili int.
adesso come faccio leggere le due variabili dal file (dove ad esempio ci sarà scritto 2 15 e allora x dovrà valere 2 e y 15), elaborarle e poi rimandarle nel file?
grazie
popoxxx
14 5
12 2
allora puoi leggere il file a stringhe e da queste estrarre i numeri....
ma ci sono molte altre possibilita, dipende da come e fatto il file e da cosa vuoi farci...
ecco preceduto da oregon
Seguendo le vostre indicazioni ho creato questo codice (per prova):
Nel file ho messo come contenuto iniziale 5 2.codice:#include <iostream> #include <fstream> using namespace std; int main() { int x; int y; fstream filei; fstream fileo; filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file provaf.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; cout << "Scrivi i nuovi valori separati da spazio\n"; cin >> x >> y; fileo.open("in.txt"); if(!fileo) { cout << "Errore nella lettura del file provaf.txt"; return 1; } fileo << x << y; fileo.close(); filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file provaf.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; return 0; }
ecco un esempio di esecuzione:
e nel file c'è scritto: 932ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles
5 2
Scrivi i nuovi valori separati da spazio
9 3
932 3
perchè?
all'esecuzione successiva:
e nel file: 912ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles
932 -1075450796
Scrivi i nuovi valori separati da spazio
9 12
912 12
e così via con risultati sempre più strani.
perchè???
grazie
popoxxx
Nuova versione:
codice:#include <iostream> #include <fstream> using namespace std; int main() { int x; int y; fstream filei; fstream fileo; filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file provaf.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; cout << "Scrivi i nuovi valori separati da spazio\n"; cin >> x >> y; fileo.open("out.txt"); if(!fileo) { cout << "Errore nella lettura del file provaf.txt"; return 1; } system("cp out.txt in.txt"); fileo << x << y; fileo.close(); filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file provaf.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; return 0; }Il file in vale:Risultato:
872 -1081739660 <- e anche qui
Scrivi i nuovi valori separati da spazio
8 7
8 7
ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles -1208521863 -1077798380
Scrivi i nuovi valori separati da spazio
8 7
87 7 <- è qui che mi sembra strano
87
e out vale:
87
altra esecuzione:
[quore]
ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles
87 -1079680956
Scrivi i nuovi valori separati da spazio
9 10
87 10 <- ?????
[/quote]
in:
87
out:
910
grazie
popoxx
PS: io preferirei l'altra soluzione se funziona
Il file in scrittura lo devi aprire con
fileo.open("c:\\in.txt", ios_base:ut | ios_base::trunc);
e per scrivere non devi dimenticare lo spazio
fileo << x << " " << y;
Su linux senza c:\\ però ok
grazie mille ora funziona.
In definitiva:
grazie ancoracodice:#include <iostream> #include <fstream> using namespace std; int main() { int x; int y; fstream filei; fstream fileo; filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file in.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; cout << "Scrivi i nuovi valori separati da spazio\n"; cin >> x >> y; fileo.open("in.txt", ios_base::out | ios_base::trunc); if(!fileo) { cout << "Errore nella lettura del file in.txt"; return 1; } fileo << x << " " << y; fileo.close(); filei.open("in.txt"); if(!filei) { cout << "Errore nella lettura del file in.txt"; return 1; } filei >> x >> y; filei.close(); cout << x << " " << y << endl; return 0; }
ciao
popoxxx