Почему мои данные искажаются с помощью ranges::to?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему мои данные искажаются с помощью ranges::to?

Сообщение Anonymous »

Я работаю с библиотекой диапазонов и конвейерами для чтения файлов CSV. Мой код работает нормально, за исключением случаев, когда я добавляю ranges::to в конце конвейера. При добавлении «to» последняя строка данных повторяется и искажается.
Правильный вывод:
"Values to Analyze, Current", 1, 7, 2025, 5, 218, 11, 23, 119
"Values to Analyse, Current", 1, 8, 2025, 21, 2055, 1, 7, 131
"Values to Analyse, Current", 1, 9, 2025, 29, 210, 3, 4, 105
"Values to Analyse, Current", 1, 10, 2025, 5, 214, 4, 7, 124

Искаженный вывод:
"Values to Analyse, Current", 1, 10 ,2025 ,5 ,214 ,4, 7,1 24
"Values to Analyse, Current", 1, 10 ,2025 ,5, 214,4 ,7 ,1 24
"Values to Analyse, Current", 1, 10 ,2025 ,5, 214, 4, 7, 124
"Values to Analyse, Current", 1, 10, 2025, 5, 214, 4, 7, 124

Вот код. Оно длинное, но я не смог придумать более короткий пример. Ссылка на него также есть в Compiler Explorer,
#include
#include
#include
#include
using namespace std::literals;

namespace rng = std::ranges;
namespace vws = std::views;
using vws::chunk_by, vws::transform;

#include
using fmt::println, fmt::print;

inline auto to_vec{rng::to()};
//----------------------------------------------------------------------------------------------
struct Line { // @formatter:off
std::string mLine;
friend void operator>>(std::istream& is, Line& l) { std::getline(is, l.mLine); }
}; // @formatter:on
//--------------------------------------------------------------------------------------------------
void print_data(auto&& data) {
for (auto const& line : data) {
for (auto const& cnk : line) {
for (auto const& elem : cnk) {
print("{}", elem);
}
print("\t");
}
println("");
}
}
//--------------------------------------------------------------------------------------------------
auto parse_csv = transform([](auto&& line) { //
static bool is_quoting{false};
return line.mLine //
| chunk_by([](char const lhs, char const) {
if (lhs == '"') {
is_quoting = !is_quoting;
}
return (lhs != ',' or is_quoting);
}) //
| to_vec;
});
//--------------------------------------------------------------------------------------------------
constexpr std::string_view test_data{ // @formatter:off
R"("Values to Analyze, Current",1,7,2025,5,218,11,23,119
"Values to Analyse, Current",1,8,2025,21,2055,1,7,131
"Values to Analyse, Current",1,9,2025,29,210,3,4,105
"Values to Analyse, Current",1,10,2025,5,214,4,7,124)"
};// @formatter:on
//--------------------------------------------------------------------------------------------------
auto main() -> int {

std::ispanstream csv_chars(test_data);
auto data{vws::istream(csv_chars)};
auto csv_data{data | parse_csv};

#if 0 // works okay
print_data(csv_data);
#elif 1 // why does the vector garble output?
print_data(csv_data | to_vec);
#else // transform deleted - why does it work above?
println("{}", fmt::join(csv_data, " "));
#endif

return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ostdvector
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему мои данные искажаются с помощью ranges::to?
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему мои данные искажаются с помощью ranges::to?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • C ++ Ошибка при вставке `std :: vector <unsigned int>` in `std :: vector <std :: vector <int >>`, но не для `unsigned in
    Anonymous » » в форуме C++
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • C ++ Ошибка при вставке `std :: vector <unsigned int>` in `std :: vector <std :: vector <int >>`, но не для `unsigned in
    Anonymous » » в форуме C++
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • C ++ Ошибка при вставке `std :: vector <unsigned int>` in `std :: vector <std :: vector <int >>`, но не для `unsigned in
    Anonymous » » в форуме C++
    0 Ответы
    63 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»