Comment puis-je lire les données jusqu'à la fin de la ligne? J'ai un fichier texte "fichier.txt" avec cette
1 5 9 2 59 4 6
2 1 2
3 2 30 1 55
J'ai ce code:
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)
}
}
dans mes fonctions (2) j'utilise les données des lignes et il faut que ce soit Int, pas char
N'utilisez pas while(!file.eof())
car eof()
ne sera défini qu'après la lecture de la fin du fichier. Cela n'indique pas que la prochaine lecture sera la fin du fichier. Vous pouvez utiliser while(getline(...))
à la place et combiner avec istringstream
pour lire des nombres.
#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 ...
}
}
}
Vous devez lire Pourquoi iostream :: eof est-il dans une condition de boucle mal considéré? .
Quant à la lecture jusqu’au bout de la ligne. il y a std::getline
.
Cependant, vous avez un autre problème: vous bouclez while (!file.eof())
qui ne fonctionnera probablement pas comme prévu. La raison en est que l'indicateur eofbit
n'est défini que lorsque after vous essayez de lire au-delà de la fin du fichier. Au lieu de cela, vous devriez faire par exemple while (std::getline(...))
.
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
Si vous voulez l'écrire en tant que fonction afin d'appeler certains où, vous pouvez utiliser un vecteur. C’est une fonction que j’utilise pour lire un tel fichier et renvoyer des éléments entiers au niveau des siens.
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;
}