2016-03-08 45 views
0

我有一個包含零件號列表的文本文件。我需要將每行的第一個部件號添加一個系統編號。 數據看起來是這樣的:將文本插入文本文件中每行的固定位置

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

出於某種原因,沒有完成整個文件和最好我想修改一個文件而不是創建一個新文件。任何幫助讚賞。

+0

你在哪裏關閉或處置作者? –

+0

循環很好 - 它是一個標準的循環半。問題在您發佈的代碼之外。我懷疑你在嘗試使用它之前沒有關閉這個文件。此外,以這種方式修改原始文件的唯一方法是像創建一個新文件一樣創建一個新文件,然後刪除舊文件並重命名新文件。除非你能把它全部讀入記憶中 - 請參閱Hari Prasad的答案。 –

回答

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); 
+0

看到\t @MatthewWatson評論 - 這將永遠循環:-) – profesor79

+0

哦,是的,將更新它。謝謝@ profesor79 –

+0

@ profesor79更新我的答案,謝謝指出它。 –

1

請檢查您的文件是否有以null結尾的空行, 有時這是TextReader剛停止讀取時的問題,因爲它在行中爲空。

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(); 
+0

當到達文件結尾時,它將永遠循環,並且'reader.ReadLine()'每次調用時都會返回'null'。 –

+0

@MthetheWWatson - true - 將修復 – profesor79

+0

@MthetheWWatson修復。 – profesor79

相關問題