我即将建立一个解决方案,每晚都会收到以逗号分隔的列表。这是一个包含大约14000行的列表,我需要浏览列表并选择列表中的一些值。 我收到的文件是为每个“案例”建立的,大约有50个以分号分隔的值。文件的结构如何:
“”;“2010-10-17”;“”;“”;“”;期间 - 最后24小时“;”问题是客户无法找到......“; 等等,还有43个分号。每个“案例”都以“总计515”的值结束;
我需要做的是完成所有这些“案例”并撤回“案例”中的一些值。 “案例”总是以相同的顺序构建,我知道它总是需要提取的第3,15和45分号值。
我怎样才能以最简单的方式做到这一点?
答案 0 :(得分:2)
我认为你应该将这个问题分解成更小的问题。以下是我要采取的步骤:
不要担心“最简单”的方式。您需要一种方式。无论你做什么,都要努力工作并担心优化它,以便以后最简单,最快,最小等。
答案 1 :(得分:2)
假设“行”是行并且你逐行读取,你的主要工具应该是string.Split:
foreach (string line in ... )
{
string [] parts = line.split (';');
string part3 = parts[2];
string part15 = parts[14];
// etc
}
请注意,如果任何列的内容都包含“;”
,这是一种简单的方法答案 2 :(得分:1)
您可以使用String.Split
两次。
第一次使用“Total 515”;作为使用this overload的拆分字符串。这将为您提供一系列案例。
第二次使用“;”作为每个案例使用this overload的拆分字符。这将为每个案例提供一个数据数组。由于数据一致,您可以提取此数组的3 rd ,15 th 和45 th 元素。
答案 3 :(得分:0)
我会搜索现有的csv库。转义规则可能不容易映射到正则表达式。
如果自己编写一个库,我首先会将每一行解析为一个列表/一个字符串数组。然后在第二步(可能在csv库本身之外)将stringlist转换为强类型对象。
答案 4 :(得分:0)
一种简单但缓慢的方法是从输入(例如StringReader
类)中读取单个字符。编写一个读取引号的ReadItem
方法,继续读取直到下一个引号,然后查找下一个字符。如果是分号的换行符,则已读取一个项目。如果是另一个引用,请向正在阅读的项目添加单引号。否则,抛出异常。然后使用此方法将输入数据分成一系列项目,每行存储,例如在string[number of items in a row]
中,存储在List<>
中的行。然后,您可以使用此类读取另一个类中的CSV数据,该类将读取的数据解码为可以从中获取数据的对象。