【发布时间】:2021-04-17 21:56:52
【问题描述】:
在我的工作中,我们使用 EDI UNIFACT,我正在尝试导入这些消息。 我正在使用一个接受文件(streamreader)并映射信息的开源库,问题是我收到的一些文件没有这个库的正确格式。
每条消息从 UNB ... 开始,在 UNZ ...结束。
UNB+UNOA:2+
UNH+1+CODECO
.........
UNT+19+1'
UNZ+1+144427'
------------------> I need to separate here
UNB+UNOA:2+
UNH+1+CODECO
.......
UNT+19+1'
UNZ+1+144427'
.....
我已经使用流式阅读器搜索单词,然后重置它。
foreach (string filename in Directory.GetFiles(path))
{
using (var stream = new StreamReader(filename))
{
while (!stream.EndOfStream)
{
var line = stream.ReadLine();
if (line.Contains(@"CODECO")) //Codeco
{
stream.DiscardBufferedData();
stream.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
var grammar_read = EdiGrammar.NewEdiFact();
var interchange = default(Interchange<CODECO_D95B>);
interchange = new EdiSerializer().Deserialize<Interchange<CODECO_D95B>>(stream, grammar_read);
if (interchange != null)
list.AddRange(ImportCODECO(interchange));
}
}
}
我的问题是,拆分这些文件,以便我可以分别输入来自文件的每个块的信息?
非常感谢
【问题讨论】:
-
这是一种特殊的格式,你通常会使用特殊的解析器来解析它。有一些漂浮在附近
-
我有一个解析器,如果它只在 UNB 和 UNZ 之间工作,这就是为什么我需要将每个文件拆分为多个文件的原因。或者理想情况下重新使用流阅读器并逐块提供它......
-
使用
FIle.ReadLines,然后使用扩展方法(我的是GroupByWhile)或使用计数器和常规GroupBy将行分组为块。
标签: c# streamreader edi