#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
потомки.