PDA

Visualizza la versione completa : [C++] Leggere/scrivere variabili da/a file


popoxxx
15-06-2007, 16:59
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

oregon
15-06-2007, 17:07
Ma che vuoi dire?

popoxxx
15-06-2007, 17:15
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.

#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;
}


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

oregon
15-06-2007, 17:36
Per leggerle



file >> x >> y;

file.close();

cout << x << " " << y << endl;


Poi le puoi elaborare, ma per scriverle nuovamente, devi usare un altro file ...

UltraBeginner
15-06-2007, 17:36
Originariamente 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

ma ehm dipende come e fatto il file, per es se fosse fatto cosi

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 :)

:ciauz: :ciauz:

popoxxx
16-06-2007, 16:32
Seguendo le vostre indicazioni ho creato questo codice (per prova):


#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;
}


Nel file ho messo come contenuto iniziale 5 2.
ecco un esempio di esecuzione:


ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles
5 2
Scrivi i nuovi valori separati da spazio
9 3
932 3


e nel file c'è scritto: 932

perchè?

all'esecuzione successiva:


ale@ALE002:~/Desktop/Ale/C++/prova files$ ./provafiles
932 -1075450796
Scrivi i nuovi valori separati da spazio
9 12
912 12

e nel file: 912

e così via con risultati sempre più strani.

perchè???

grazie
popoxxx

popoxxx
16-06-2007, 16:41
Nuova versione:


#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;
}



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


Il file in vale:
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

oregon
16-06-2007, 16:44
Il file in scrittura lo devi aprire con

fileo.open("c:\\in.txt", ios_base::out | ios_base::trunc);

e per scrivere non devi dimenticare lo spazio

fileo << x << " " << y;

popoxxx
16-06-2007, 16:51
Su linux senza c:\\ però ok

grazie mille ora funziona.

In definitiva:


#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;
}

grazie ancora
ciao
popoxxx

Loading