C#文本文件输入多文件输出

C#文本文件输入多文件输出,c#,parsing,flat-file,C#,Parsing,Flat File,我有一个类似以下内容的文件: |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,Nam

我有一个类似以下内容的文件:

|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个字符将文件分解为多个文件

名为29923c.asc的文件1:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |
名为47422K.asc的文件2:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |
名为9875D.asc的文件3:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |
我不知道在程序得到它之前文件中会有什么,只是格式。6位数字将根据客户的不同而变化。我不知道他们会是什么

我只知道格式


有谁能给我一个建议,告诉我如何动态获取\维护这些信息,以便我能将其解析成单个文件吗?

我建议在类中使用这样的解析器


您可以将数据读入内存,使用第一个字段对其进行排序,然后写出各个文件。

逐行读取。从每一行获取代码并创建文件,将对打开的文件流的引用作为键放入字典。在下一行中,检查字典中的密钥,并使用打开的流或创建新的流。读取所有文件后,关闭所有流

如果文件行的大小较大,此算法将防止文件行使用过多内存

例如,为了解析每一行,您可以简单地使用正则表达式。

列出行;//加载行表单文件
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   
}
Dictionary dic=新字典(); foreach(行中的字符串行) { string key=line.Split(“|”)[0]; 如果(!dic.CONTANSKEY(钥匙)) 添加(键,新列表{line}); 其他的 dic[键]。添加(行) } foreach(dic中的var对) { //创建文件并在其中存储pair.Value }
你可以用蛮力的方式

阅读:

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);
}

如果一个文件的大小非常大,会发生什么?全部存储在内存中?@archer ErocM没有指定该文件非常庞大,最多可能只有几百行。哇,我觉得自己像个傻瓜。我也是这么想的,哈哈。谢谢你的信息!每个人的答案都会起作用,我感谢你的帮助!这是最简单的处理方法。我读了一行,然后把它输出到需要的文件中。我将输出到的每个文件都添加到字典中,这样我就知道一旦完成,我必须处理什么。