【问题标题】:C# Text File Input Multi-File OutputC#文本文件输入多文件输出
【发布时间】:2011-08-30 07:09:52
【问题描述】:

我有一个看起来像这样的文件:

|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.asc 的文件 2:

|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |

名为 9875D.asc 的文件 3:

|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |

在程序获取文件之前,我不知道文件中的内容,只是格式。这 6 位数字将根据客户而变化。我不知道他们会是什么。

我只知道格式。

谁能给我一个关于如何动态获取\维护这些信息的建议,以便我可以将其解析成单独的文件?

【问题讨论】:

  • 哇,我觉得自己像个傻瓜。我是其他人这么想的,哈哈。谢谢(你的)信息!每个人的答案都会起作用,我感谢您的帮助!

标签: c# parsing flat-file


【解决方案1】:

我建议使用 TextFieldParser 类之类的解析器。

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

【讨论】:

    【解决方案2】:

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

    如果文件大小很大,此算法将防止文件行占用过多内存。

    例如,为了解析每一行,您可以简单地使用 RegEx。

    【讨论】:

    • 这是最简单的处理方法。我读了一行,然后将其输出到它需要进入的文件中。我输出到的每个文件,我都添加到字典中,这样我就知道一旦完成了我必须处理的内容。
    【解决方案3】:
    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   
    }
    

    【讨论】:

    • 如果文件很大会怎样?全部存储到内存中?
    • @archer ErocM 未指定该文件非常大
    • 最多几百行。
    【解决方案4】:

    你可以用蛮力的方式来做。

    阅读:

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

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多