randomp103 Ответов: 2

Как прочитать текстовый файл в массив строк и преобразовать его из текстового файла с разделителями каналов в csv-файл с разделителями-запятыми?


 need help trying to figure out how to use the conversionFile command in c++ program to read an input text file ("test.txt") line by line into an array of strings and then convert it from pipe delimited to comma delimited by writing the changed text into an output csv file. Also need to add additional quotes where they were given. I am stuck on where to start. I know how to do the reading into the array but the actual conversion of pipe to comma delimited, I am stuck on.

What I have tried:

The given "test.txt" is:
 Miles per hour|6,445|being the "second" team |5.54|9.98|6,555.00 
 "Ending" game| left at "beginning"|Elizabeth, New Jersey|25.25|6.78|987.01
 |End at night, or during the day|"Let's go"|65,978.21|0.00|123.45
 Left-base night|10/07/1900|||4.07|777.23 
"Let's start it"|Start Baseball Game|Starting the new game to win

The output csv file is expected to look like this when the pipe delimited is turned to commas and additional quotes are added: 
Miles per hour,"6,445","being the ""second"" team member",5.54,9.98,"6,555.00", """Ending"" game","left at ""beginning""","Denver, Colorado",25.25,6.78,987.01, ,"End at night, during the day","""Let's go""","65,978.21",0.00,123.45,
 Left-base night, 10/07/1900,,,4.07,777.23, 
"""Let's start it""", Start Baseball Game, Starting the new game to win,

2 Ответов

Рейтинг:
8

Maciej Los

Самый простой способ для преобразования данных CSV-файлов заключается в использовании Для oledb[^]. Вы можете прочитать текстовый файл с помощью Файл Schema.ini (драйвер текстового файла)[^] путем указания разделителя и дампа данных в другой текстовый файл, используя другой дилимитер.
Для получения подробной информации о соединительной строке, пожалуйста, смотрите: Строки подключения текстового файла - ConnectionStrings.com[^]

Шаги, которые нужно сделать:
1. Откройте Класс OleDbConnection (System.Data.OleDb) | Microsoft Docs[^]
2. Создание Класс OleDbCommand (System.Data.OleDb) | Microsoft Docs[^]
3. Создание OldDbDataReader[^] и позвонить команда.Метода executereader[^] метод получения данных в этот считыватель.
4. Создание объект DataTable[^] и позвонить метод Load[^] чтобы ввести в него данные.
5. Наконец, напишите метод, который сбрасывает данные в текстовый файл, обрабатывая каждую строку datatable.

Альтернативно..
1. Выполните шаги 1-3
3. Чтение данных из OleDbDataReader[^] и запишите каждую запись в текстовый файл, используя новый формат csv.

Вариант № 3
Используйте RTU (готовые к использованию) решения:
Гитхаб - Бен-штрассе/быстро-СРР-файл CSV-парсер: быстро-СРР-файл CSV-парсер[^]
GitHub - al-eax/CSVWriter: простой класс c++ csv writer[^]
GitHub - jay/CSV: классы C++ для чтения/записи CSV - записей из/в поток.[^]

Удачи вам!


Рейтинг:
0

OriginalGriff

В c++ нет "команды conversionFile" - вам придется написать свою собственную или найти код, чтобы точно делать то, что вы хотите. Последнее маловероятно, первое довольно просто.

Но... хотя мы более чем готовы помочь тем, кто застрял: но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


randomp103

Я не ожидаю, что кто-то сделает все за меня, как я уже говорил, я не знаю, с чего начать преобразование после того, как текстовый файл с разделителями каналов будет считан в массив строк.

OriginalGriff

Начните с самого начала.
Считайте файл в свой массив.
Затем выполните цикл через массив, передавая каждый залог в метод "преобразования".
В этом методе обработайте строку в отдельные поля.
Затем обработайте каждое поле, как описано.
Перестройте каждую строку из eth преобразованных полей с запятыми, чтобы разделить их, и верните новую строку.
Вернувшись в цикл, создайте новые строки в новый массив, замените старые строки новыми или выведите каждую строку в новый файл.

Делайте каждый шаг за раз, проверяя его, чтобы убедиться, что он работает, прежде чем перейти к следующему.
Как это сложно решить? :)