Может ли std :: wistringstream игнорировать пробелы в строках при разборе? - PullRequest
0 голосов
/ 31 января 2019

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 НЕ отформатирована

1 Ответ

0 голосов
/ 31 января 2019

Вы можете сделать с std::quoted, поскольку C ++ 14:

iss >> std::quoted(str);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...