Leggere da un file in c++ fino alla fine della riga?

Come faccio a leggere i dati fino a fine riga?Ho un file di testo “file.txt” con questo

1 5 9 2 59 4 6
2 1 2 
3 2 30 1 55

Ho questo codice:

ifstream file("file.txt",ios::in);
while(!file.eof())
{
    ....//my functions(1)
    while(?????)//Here i want to write :while (!end of file)
    {
        ...//my functions(2)
    }

}

nelle mie funzioni(2) utilizzare i dati da righe e deve essere di tipo Int ,char non

Perché avete bisogno di leggere fino alla fine della linea? E da “end of the line” si intende la fine del prima linea, o la fine di tutte le linee?
da “fine linea” intendo leggere la prima riga,utilizzare i numeri per fare quello che devo e andare sulla seconda riga…,poi sulla terza riga fino alla fine del file
Stai eseguendo le stesse operazioni su ogni riga?

Fare una qualsiasi delle attuali risposte di aiuto? Si prega di fornire un feedback.

OriginaleL’autore user3050163 | 2014-01-24

4 Replies
  1. 5

    Non utilizzare while(!file.eof()) come eof() verranno definiti solo dopo aver letto la fine del file. Non indica, che la prossima lettura sarà la fine del file. È possibile utilizzare while(getline(...)), invece, e si combinano con istringstream leggere i numeri.

    #include <fstream>
    #include <sstream>
    using namespace std;
    
    //... ...
    ifstream file("file.txt",ios::in);
    if (file.good())
    {
        string str;
        while(getline(file, str)) 
        {
            istringstream ss(str);
            int num;
            while(ss >> num)
            {
                //... you now get a number ...
            }
        }
    }

    Avete bisogno di leggere Perché iostream::eof all’interno di una condizione di loop considerato sbagliato?.

    se io uso getline ho per la conversione da int a char,ma ho bisogno di dati int!!!!
    Aggiornato.
    (getline(file, str)) non funziona errore:; t la conversione da istream a char
    E l’errore è?
    Errore 1 errore C2664: ‘std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)’ : impossibile convertire il parametro 1 ‘std::ifstream’ a ‘char *’

    OriginaleL’autore herohuyongtao

  2. 2

    Come per la lettura fino alla fine della riga. c’è std::getline.

    Hai un altro problema, però, è che è che è un ciclo while (!file.eof()) che molto probabilmente non funziona come previsto. Il motivo è che il eofbit flag non è impostato fino a dopo si tenta di leggere oltre la fine del file. Invece si dovrebbe fare ad esempio while (std::getline(...)).

    getline di lavoro con carattere solo
    Leggere in un std::string, mettere in una std::istringstream, ciclo usando l’operatore di input >> per ottenere ogni spazio delimitato da valore.
    O dopo aver letto la riga e metterlo in un std::istringstream, utilizzare std::copy con std::istream_iterator per inserire i valori direttamente in un contenitore std::back_inserter.

    OriginaleL’autore Some programmer dude

  3. 1
    char eoln(fstream &stream)          //C++ code Return End of Line
    {
        if (stream.eof()) return 1;     //True end of file
        long curpos;    char ch;
        curpos = stream.tellp();        //Get current position
        stream.get(ch);                 //Get next char
        stream.clear();                 //Fix bug in VC 6.0
        stream.seekp(curpos);           //Return to prev position
        if ((int)ch != 10)              //if (ch) eq 10
            return 0;                   //False not end of row (line)
        else                            //(if have spaces?)
            stream.get(ch);             //Go to next row
        return 1;                       //True end of row (line)
    }                                   //End function

    OriginaleL’autore Rakia

  4. 0

    Se si desidera scrivere la funzione per chiamare da qualche parte, si può utilizzare un vettore. Questa è una funzione che uso per leggere tali file e tornare interi elemento saggio.

    vector<unsigned long long> Hash_file_read(){
        int frames_sec = 25;
        vector<unsigned long long> numbers;
        ifstream my_file("E:\\Sanduni_projects\\testing\\Hash_file.txt", std::ifstream::binary);
        if (my_file) {
    
            //ifstream file;
            string line;
    
            for (int i = 0; i < frames_sec; i++){
                getline(my_file, line);
                numbers.push_back(stoull(line));
            }
    
        }
        else{
            cout << "File can not be opened" << endl;
        }
        return numbers;
    }

    OriginaleL’autore

Lascia un commento