Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31

    [C++] più variabili da un file

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma che vuoi dire?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Per leggerle

    codice:
       file >> x >> y;
    
       file.close();
    
       cout << x << " " << y << endl;
    Poi le puoi elaborare, ma per scriverle nuovamente, devi usare un altro file ...

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


  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    Seguendo le vostre indicazioni ho creato questo codice (per prova):
    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;
    }
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    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;
    }
    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

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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;

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    Su linux senza c:\\ però ok

    grazie mille ora funziona.

    In definitiva:
    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 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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.