我有一个看起来像这样的文件:
|29923C|SomeGuy,NameHere1 |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2 |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3 |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4 |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5 |00039252|042311|Some Address Info Here |
我需要根据从位置2开始的前6个字符将文件分成多个文件。
文件1名为29923c.asc:
|29923C|SomeGuy,NameHere1 |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4 |00039252|042311|Some Address Info Here |
文件2名为47422K.asc:
|47422K|SomeGuy,NameHere5 |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2 |00039252|042311|Some Address Info Here |
文件3命名为9875D.asc:
|98753D|SomeGuy,NameHere3 |00039252|042311|Some Address Info Here |
我不知道程序获取之前文件中的内容,只是格式。 6位数将根据客户的不同而有所变化。我不知道他们会是什么。
我唯一知道的是格式。
有人可以给我一个关于如何动态获取\维护这些信息的建议,以便我可以将其解析为单个文件吗?
答案 0 :(得分:4)
我建议使用像TextFieldParser
类这样的解析器。
您可以将数据读入内存,使用第一个字段对其进行排序,然后写出单个文件。
答案 1 :(得分:2)
List<string> lines ; // load lines form file
Dictionary<string,List<string>> dic = new Dictionary<string,List<string>>();
foreach(string line in lines)
{
string key = line.Split('|')[0];
if(!dic.ContainsKey(key))
dic.Add(key,new List<string>{line});
else
dic[key].Add(line)
}
foreach(var pair in dic)
{
//create file and store there pair.Value
}
答案 2 :(得分:1)
逐行阅读。从每一行获取代码并创建文件,将对打开的文件流的引用放入字典中,并将代码作为键。在每个下一行检查密钥的字典并使用打开的流或创建新流。读完所有文件后关闭所有流。
如果文件行的大小很大,该算法将阻止对文件行使用太多内存。
例如,对于解析每一行,您只需使用RegEx。
答案 3 :(得分:0)
你可以用蛮力的方式来做。
读:
Dictionary<string, List<string>> DICT;
Until End of File {
Read a line to LINE
Read characters 1-7 in LINE to CUSTOMERID
DICT[CUSTOMERID].Add(LINE);
}
写作:
foreach KeyValuePair entry in DICT {
Create file with name entry.Key
foreach string line in entry.Value {
Write line to file line
}
}