2017-01-19 5 views
0

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

Text18;Text30;Text5;Text6;Text7;Text27;Text14;Text9;Text11;Text19;Text12;Text13;Text24;Text32;Text4;Text34 
Supervisor:;Tom Stringer;;;;;;;;;;;;;; 
Ethan Whitehouse;;;;;;;;;;;;;;; 
;;Date In;;Time In;Date Out;;Time Out;Break Time;;;Total Hrs.;;WageRate;;DLC 
Monday;;10/31/2016;8:42 AM;;10/31/2016;;5:41 PM;0.00;Hrs.;8.98;;Hrs.;;33.40;$300.04 
;;;;;;Total:;;;;;;;;; 
;;;;;;;;0.00;Hrs.;8.98;;Hrs.;;33.40;$300.04 
Mark Smalley;;;;;;;;;;;;;;; 
;;Date In;;Time In;Date Out;;Time Out;Break Time;;;Total Hrs.;;WageRate;;DLC 
Monday;;10/31/2016;8:48 AM;;10/31/2016;;4:10 PM;0.00;Hrs.;7.37;;Hrs.;;29.00;$213.63 
;;;;;;Total:;;;;;;;;; 
;;;;;;;;0.00;Hrs.;7.37;;Hrs.;;29.00;$213.63 

мне нужно быть в состоянии найти (для данного примера) Марк Смолли, и его общее DLC. Так что в основном мне нужен Марк Смолли = $ 213,63. Мне нужно иметь возможность добавлять эти суммы в долларах к массиву. Есть ли хороший способ сделать это? У меня очень мало контроля над тем, как данные форматируются/разделяются.

+1

Похоже, что данные должны быть помещены в формат, который обрабатывает иерархии, такие как XML или JSON. Все, что вы можете сделать, это написать свой собственный код, чтобы разобрать его на основе любых правил. – juharr

+0

Что вы имеете в виду с _ "У меня очень мало контроля над тем, как данные отформатированы/ограничены." _? Если файл csv отличается каждый раз, когда вы его принимаете, я не вижу возможности проанализировать его. –

+3

он вообще не дезорганизован. Попробуйте открыть его в Excel, и вы увидите шаблон. На самом деле, вероятно, это произошло тем, что кто-то просто сохранил таблицу в файле с разделителями. Это не очень хорошая структура, но как только вы видите шаблон, достаточно легко пройти через поля, пока не придете к тем, которые вы хотите. Вам просто нужно указать вашему коду, какие поля искать, они будут находиться в одном и том же месте по отношению друг к другу каждый раз, при условии, что формат файла одинаковый каждый раз, когда вы его получите. – ADyson

ответ

0

Вы можете разобрать этот файл CSV в рваной массив:

var myCsv = File.ReadAllText(@"C:\MyStuff\CSV.txt"); 
var myCsvArr = myCsv.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
var myData = new string[myCsvArr.Length][]; 
for (int i = 0; i < myCsvArr.Length; i++) 
{ 
    myData[i] = myCsvArr[i].Split(';'); 
} 

Тогда я предполагаю, что доступ к элементам будет легко.