2014-03-26 139 views
-2

這裏是代碼;將字符串分成幾行?

 foreach (var file in d.GetFiles("*.xml")) 
     { 
      string test = getValuesOneFile(file.ToString()); 

      result.Add(test); 

      Console.WriteLine(test); 
      Console.ReadLine(); 
     } 

     File.WriteAllLines(filepath + @"\MapData.txt", result); 

下面是它在控制檯中的樣子;

[30000] 
total=5 
sp 0 -144 152 999999999 
sp 0 -207 123 999999999 
sp 0 -173 125 999999999 
in00 1 -184 213 999999999 
out00 2 1046 94 40000 

下面是它在文本文件中的樣子(當寫在循環結束時)。

[30000]total=5sp 0 -144 152 999999999sp 0 -207 123 999999999sp 0 -173 125 999999999in00 1 -184 213 999999999out00 2 1046 94 40000 

我需要它以與控制檯輸出相同的樣式編寫行。

+0

是什麼類型'result'? –

+1

用[Notepad ++](http://notepad-plus-plus.org/)打開文件,並轉到查看>顯示符號>顯示所有字符。如果您在每行末尾看到[** LF **],但沒有[** CR **],則您的Unix樣式行結束符在Windows記事本中不起作用。如果你沒有看到[** CR **]和[** LF **],那麼你使用'File.WriteAllLines()'的方式是不正確的,因爲它實際上並沒有將行尾寫入文件。 – qJake

+0

@SpikeX,我看到這個:https://hostr.co/file/9RHXCN286Uvb/Untitled.png任何解決方案? – user3457618

回答

1

不是WriteAllLines你可能會想只寫手動文字:

string textToWrite = ""; 
foreach (var res in result) 
{ 
    textToWrite += res.Replace("\r","").Replace("\n",""); //Ensure there are no line feeds or carriage returns 
    textToWrite += "\r\n"; //Add the Carriage Return 
} 
File.WriteAllText(filepath + @"\MapData.txt", textToWrite) 
+0

這樣做什麼也不做,結果相同:*( – user3457618

+0

Notepad ++中的結果是什麼? – MikeH

+0

Notepad ++中的結果與CR&LF中的一行很長:https://hostr.co/file/zPmXBdMnwbMd/Untitled.png – user3457618

1

這個問題絕對是你如何在你的輸出中尋找換行符。在由WriteAllLines所寫的每個字符串之後將插入Environment.NewLine

我會建議在NotePad ++中打開輸出文件,並打開View-> ShowSymbol-> Show End of Line來查看文件中的行尾字符。例如,在我的機器上,每行窗口末尾都有[CR][LF](回車/換行)。

+1

'WriteAllLines'應該引入換行符。這是區別於'WriteAllText'。在這個改變之後,代碼現在在每行的末尾有兩個換行符。 – Servy

+0

啊..好點...試着回答太快。 :) – Kevin

+0

@Servy源文本需要有「換行符」。如果沒有,WriteAllLines是靜音的。 – mxmissile

3

WriteAllLines將使用環境新行字符串將每個值分開,但是,在計算機的整個歷史中,許多可能的不同字符已被用於表示新行。您正在使用一些期待不同類型的新行分隔符的程序來查看文本文件。您應該使用不同的程序來查看該文件的值;一個要麼正確處理這種類型的分隔符(或者可以處理任何類型的分隔符),你應該配置你的程序以期望給定的分隔符類型,否則你需要用一個手工編寫字符串的方法替換WriteAllLines使用另一個新的行分隔符。