Разделение строки, состоящей из файла CSV - PullRequest
0 голосов
/ 12 мая 2019

У меня есть файл CSV, который состоит из таких данных;

asset id,file_name,mime_type,created_by,email,country,description
51df6a98-614e-40ef-8885-95ae50940058,ElitProin.aam,application/x-authorware-map,sblack0,jmitchell0@huffingtonpost.com,United States,Maecenas ut massa quis augue luctus tincidunt. Nulla mollis molestie lorem. Quisque ut erat.
279899c1-bc63-495c-94c5-57f25c881ed2,MusVivamusVestibulum.xla,application/x-excel,iadams1,rhenry1@xrea.com,Canada,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est."
3060b1db-9a0a-4046-b10a-b90a0c440070,NullaUltrices.sit,application/x-sit,jmatthews2,jadams2@ft.com,Japan,"Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa. Donec dapibus. Duis at velit eu est congue elementum."
7ef8ddf4-0b60-43e6-9e17-21029da02c69,Eros.tsv,text/tab-separated-values,dadams3,jmoreno3@joomla.org,Serbia,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est."
588610a3-b546-4c2e-822d-c822ba20a775,BlanditNam.aim,application/x-aim,dpierce4,aortiz4@devhub.com,United States,In congue. Etiam justo. Etiam pretium iaculis justo.
3de294a8-8f13-4f86-b447-92e8fd79277d,NecCondimentumNeque.jpe,image/jpeg,pyoung5,ckim5@ft.com,Romania,"Fusce posuere felis sed lacus. Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl. Nunc rhoncus dui vel sem."
209bf3d7-e792-4f3f-98e8-240efcf81e31,DuisMattisEgestas.gif,image/gif,ldaniels6,mreid6@seattletimes.com,Belgium,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est."
975eaf96-dd9f-4534-89a6-0ebabb730aa0,HacHabitassePlatea.arj,application/octet-stream,smorales7,jgarrett7@geocities.jp,Spain,In congue. Etiam justo. Etiam pretium iaculis justo.
5a8393df-d4aa-4734-8df4-10a611cd5cc7,NullaSuscipit.rt,text/vnd.rn-realtext,jschmidt8,rbowman8@prnewswire.com,United States,"Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa. Donec dapibus. Duis at velit eu est congue elementum."
f41dd5e6-8833-4b22-8e33-edcb024c4c1f,Odio.mime,message/rfc822,cholmes9,rjones9@accuweather.com,Nigeria,"Fusce posuere felis sed lacus. Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl. Nunc rhoncus dui vel sem."
74d04563-f253-4fcb-8caa-dfb2e1bba7ed,SuspendissePotentiCras.list,text/plain,tlawsona,sstevensa@ft.com,United States,"Proin eu mi. Nulla ac enim. In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem."

Я загрузил его в строковую переменную, чтобы получить доступ к нему как к целой строке. Но я хочу разбить всю эту строку на части, чтобы получить к ней доступ с помощью логики .csv. Я использую "," в качестве разделителя;

string[] values = s.Split(',');

Проблема здесь в том, что в файле .csv, с которым я работаю, есть заголовок "description" , а под этим заголовком находятся тексты, которые содержат запятые.

"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est."

Однако эти запятые не должны разделять всю "строку csv", единственным разделителем этого файла должны быть запятые, которые разделяют различные значения заголовка. Поскольку я обрабатываю этот CSV-файл внутри одной целой строки, метод Split() применяет операцию разделения на запятые, которые также находятся в текстовых значениях.

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

1 Ответ

0 голосов
/ 12 мая 2019

Вам нужно использовать RegExp для анализа csv: Вот пример:

Regex CSVParser = new Regex("^(?:([^",]+))?(?=,)|(?<=,)(?:[^",]*)?(?=[,$])|((?<=")[^"(\s*,)][^"]*(?="))|(?<=")(?=")|(?<=,)(?:[^,"])*(?=$)");
String[] Fields = CSVParser.Split(s);

Вы можете найти больше примеров регулярных выражений, выполнив поиск "" C # regex для чтения CSV-файла "или что-то вроде этого.

...