在文本文件中每行的固定位置插入文本

时间:2016-03-08 09:12:02

标签: c#

我有一个包含部件号列表的文本文件。我需要用系统编号附加每行的第一个部分编号。 数据如下所示:

94-CP1019011;967;94-EA1015590;1;
94-CP1019011;980;94-EA1020966;1;
94-CP1019011;669;94-EA1019084;1;
94-CP1019011;655;94-EA1015807;1;
94-CP1019011;326;94-KT1016113;1;
94-CP1019013;383;94-KT1015547;1;
94-CP1019013;608;94-MA1013256;1;
94-CP1019013;924;94-MA1019863;1;
94-CP1019013;384;94-MA1014969;1;

第一部分编号总是12个字符,所以我试过这个:

TextReader reader = new StreamReader("C:/Temp/BOM.txt");
TextWriter writer = new StreamWriter("C:/Temp/xBOM.txt");
for (;;)
{
    string s = reader.ReadLine();
    if (s == null)
        break;

    s = s.Insert(12, "-814590");
    writer.WriteLine(s);
}

由于某种原因,它没有完成整个文件,最好我想修改一个文件而不是创建一个新文件。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

请检查您的文件是否有以null结尾的空行, 有时这是TextReader在线上获取null时停止读取的问题。

TextReader reader = new StreamReader("C:/Temp/BOM.txt");
TextWriter writer = new StreamWriter("C:/Temp/xBOM.txt");

while (!string.IsNullOrEmpty(reader.ReadLine())) 
{
    string s = reader.ReadLine();

    s = s.Insert(12, "-814590");
    writer.WriteLine(s);
}

reader.Dispose();
writer.Close();
writer.Dispose();

答案 1 :(得分:1)

要解决此问题,只需进行一些更改。

您可以拨打continue而不是break。修改

if (s == null) break;

if (s == null) continue;

最终的代码段应该是......

while (reader.Peek() >= 0)
{
    string s = reader.ReadLine();
    if(string.IsNullOrEmpty(s)) continue;

    s = s.Insert(0, "-814590");
    writer.WriteLine(s);
}

如果您有兴趣,我们也可以使用少量Linq语句执行此操作。

 var formattedLines = File.ReadAllLines("C:/Temp/BOM.txt")
                .Where(line => !string.IsNullOrEmpty(line))
                .Select(s => s.Insert(12, "-814590")).ToArray();

File.WriteAllLines(@"C:/Temp/xBOM.txt", formattedLines);