std::wistringstream
- отличный способ легко разобрать строки из файлов.
Однако есть один случай использования, который он не может обработать:
При синтаксическом анализеstd::wstring
, он будет считать любой пробел в строке концом указанной строки.
Например, если мой файл содержит следующие строки:
This_is_a_test 42
Неверное имя строки 747
Если я попытаюсь разобрать строку и число, первое выполнится успешно, а второе не удастся.
Если я изменю содержимое файла с помощьюследующее:
"This_is_a_test" 42
"Неверное имя строки" 747
Анализ второй строки все равно не удастся, несмотря на "
.Есть ли хитрость, чтобы заставить std::wistringstream
игнорировать пробелы в строке?Что-то похожее в принципе на "
.
Является ли это случаем, который этот метод анализа не может обработать?
Пример кода для попытки анализа файла:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
int main(int argc, wchar_t* argv[])
{
// Open file
std::wifstream file("D:\\file.txt", std::fstream::in);
std::wstring str;
double number;
std::wstring line;
// For each line
while (getline(file, line))
{
std::wistringstream iss(line);
// We parse the line
if (!(iss >> str >> number))
std::wcout << L"The line " << line << L" is NOT properly formatted" << std::endl;
else
std::wcout << L"The line " << line << L" is properly formatted" << std::endl;
}
return 0;
}
Вывод с представленными примерами:
Строка This_is_a_test 42 правильно отформатирована
Строка Плохое имя строки 747 НЕ отформатировано
и
Строка "This_is_a_test" 42 правильно отформатирована
Строка "Bad name name" 747 НЕ отформатирована