行末までデータを読み取るにはどうすればよいですか?これを含むテキストファイル「file.txt」を持っています
1 5 9 2 59 4 6
2 1 2
3 2 30 1 55
私はこのコードを持っています:
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)
}
}
私のfunctions(2)では、行からのデータを使用し、charではなくIntにする必要があります
while(!file.eof())
はファイルの最後を読み取った後でのみ設定されるため、eof()
を使用しないでください。次の読み取りがファイルの終わりになることは示していません。代わりにwhile(getline(...))
を使用し、istringstream
と組み合わせて数値を読み取ることができます。
#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 ...
}
}
}
ループ条件内のiostream :: eofが間違っていると考えられる理由 を読む必要があります。
行末まで読むことも。 _std::getline
_ があります。
ただし、別の問題があります。つまり、while (!file.eof())
をループすることです。これは、期待どおりに機能しない可能性があります。その理由は、eofbit
フラグはafterがファイルの終わりを超えて読み取ろうとするまで設定されないためです。代わりに、たとえば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
どこかで呼び出すために関数として記述したい場合は、ベクトルを使用できます。これは、そのようなファイルを読み込んで整数要素を賢く返すために使用する関数です。
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;
}