Я пытаюсь разобрать текстовый файл.Отформатированный текстовый текстовый файл
Формат:
- 6 пространства
- строка
- пробел + подчеркивание + строка
- запятой + подчеркивание + строка
- запятой + подчеркивание + строка
Вот пример: " house1 _rst1,_ab,_aaaa"
Этот код работает:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream infile("test.txt");
string line;
while (getline(infile, line)) {
string house, param1, param2, param3;
size_t posP1, posP2, posP3;
// trim leading whitespaces
while (isspace(line.at(0)))
line = line.substr(1,line.length() - 1);
posP1 = line.find(" _");
house = line.substr(0, posP1);
posP2 = line.find(",_", posP1 + 2);
param1 = line.substr(posP1 + 2, posP2 - posP1 - 2);
posP3 = line.find(",_", posP2 + 2);
param2 = line.substr(posP2 + 2, posP3 - posP2 - 2);
param3 = line.substr(posP3 + 2, line.length() - 2);
cout << house << " : " << param1 << ", " << param2 + ", " << param3 << endl;
}
return 0;
}
я получить house1 : rst1, ab, aaaa
, но я хотел бы улучшить код, используя что-то вроде stackoverflow.com/a/3555952/3029422, но я не знаю, как применить его к моему случаю, когда я пытаюсь:
ifstream infile("test.txt");
string line;
while (getline(infile, line)) {
string house, param1, param2, param3;
istringstream iss(line);
if (!(iss >> house >> param1 >> param2 >> param3))
cout << "not the expected format" << endl;
else
cout << house << " : " << param1 << ", " << param2 + ", " << param3 << endl;
Я получаю not the expected format
Как я могу читать каждую строку из файла непосредственно в переменные? Я выгляжу более чистым и легким для чтения таким образом.
Парсинг по умолчанию работает только в том случае, если вещи разделены пробелами (пробелы). У вас есть поля, разделенные запятыми, и вам потребуется немного больше работы, чтобы вы это указали. – woolstar