«Ввод предоставляется в формате CSV через STDIN»

#c #csv #stdin

Вопрос:

Я работаю над проблемой программирования на C , где мне нужно написать синтаксический анализатор CSV. Я писал это раньше для файлов, но в инструкции указано:

Ввод осуществляется в формате CSV с помощью стандартного ввода данных. Первая строка — это заголовок. Последующие строки являются данными.

Вот пример входного «файла»:

 #id,time,amount
0,4,5
2,8,3
8,1,2
...
 

Теперь я немного смущен этим, потому что я не очень много работал с STDIN с тех пор, как несколько лет назад купил C . Как именно можно читать в csv-файле через стандартный ввод данных? Когда я использовал std::cin в прошлом, если я попытаюсь вставить несколько строк, будет прочитана только первая строка.

Инструкции по задаче программирования не прояснили, как входной «файл» будет вводиться через STDIN, или, возможно, это делается каким-то классическим способом, и мой недостаток знаний заставляет меня думать, что это неясно? Существует ли какой-то стандартный способ чтения CSV-файла через STDIN?

Все, что мне поручено сделать, — это обработать то, что поступает через STDIN, и мне не дано, как вещи передаются в STDIN. Я чувствую, что мне нужно знать, как все передается, чтобы знать, что я должен делать? Как будто это может передаваться символ за символом, строка за строкой, запись за записью или весь файл за раз?

Комментарии:

1. Используйте cin вместо ifstream

2. Обычно это выглядит примерно так, как myprogram < myfile.csv в командной строке

3. » Когда я использовал std::cin в прошлом, если я попытаюсь вставить несколько строк, будет прочитана только первая строка » — тогда либо вы неправильно читали строки, либо ваша консоль обрезала их до того, как они достигли вашего кода.

4. Это должно быть то же самое, что и комментарий № 2, в котором для этого используется оболочка операционной системы. В этом случае код будет просто использовать cin вместо ifstream

5. @roulette01 копирование/вставка ПОСЛЕ запуска программы ДОЛЖНА появиться в STDIN / std::cin , да, но я могу себе представить, что окно консоли МОЖЕТ обрезать текст, отправляя в приложение только 1-ю строку за раз. Использование перенаправления ввода файлов ( myprogram < myfile.csv ) было бы более надежным способом ввода многострочных данных в программу на STDIN / std::cin . На самом деле в чтении от std::cin vs нет ничего особенного std::ifstream , они оба std::istream потомки.