在C#中拆分行,映射和合并到文本文件

时间:2015-08-07 15:51:07

标签: c# string file-io merge split

例如,我有输入文本文件" FILE1.txt" 读取

000123400056780001324
000556700034520004758

这里,前7个数字=项目1,下一个=项目2,依此类推。

另一个输入地图文本文件" MAPFILE.txt" 读取

0003452 itema
0001324 itemb
0005567 itemc
0004758 itemd 

我们可以说,第1列是项目编号(7个字符),第2列是描述(5个字符)。

我添加的项目中预先存在的文本文件,以便我可以将输出写入其中。我们称之为" OUTPUT.txt" -

S.No Item1 Desc1 Item2 Desc2 Item3 Desc3

所以最终,我需要得到

S.No   Item1       Desc1      Item2      Desc2     Item3     Desc3

1      0001234     *          0005678    *         0001324   itemb
2      0005567     itemc      0003452    itema     0004758   itemd

我有大约100行像这样。 如何逐行拆分FILE1,然后将这些项目编号子串映射到MAPFILE中的子串,最后将它们合并到我已添加到项目中的OUTPUT.txt中?我&#39 ;初学者和我刚刚开始。我已经通过这种方式将我的解决方案分解为步骤,但我该怎么做呢?

非常感谢!

1 个答案:

答案 0 :(得分:1)

Linq版本也是可能的

var mapping = File.ReadAllLines("MAPFILE.txt")
              .Select(line => line.Split())
              .Where(parts => parts.Length>1) //Skip empty lines
              .ToDictionary(parts => parts[0], parts => parts[1]);

var lines = File.ReadAllLines("FILE1.txt")
            .Where(line => !String.IsNullOrWhiteSpace(line)) //Skip empty lines
            .Select(line => string.Concat(
                                Regex.Matches(line, ".{7}")
                                .Cast<Match>()
                                .Select(m => m.Value)
                                .Select(s => s.PadLeft(10) + (mapping.ContainsKey(s) ? mapping[s] : "*").PadLeft(10))
                            )
             );


string finalResult = String.Join(Environment.NewLine, lines);

<强>输出:

0001234         *   0005678         *   0001324     itemb
0005567     itemc   0003452     itema   0004758     itemd