2014-10-31 130 views
0

時忽略NUL值我有這種標籤的分隔文本文件閱讀文本文件

enter image description here

,我需要格式化爲.csv和蔭讀它像

public static void ReadDelimitedFile(string docPath) 
     { 
      using (var writer = File.CreateText(@"outputFile.csv")) 
      { 
       using (var file = new StreamReader(docPath)) 
       { 
        string line; 
        while ((line = file.ReadLine()) != null) 
        { 
         if (!string.IsNullOrEmpty(line)) 
         { 
          var delimiters = new char[] { '\t' }; 
          var segments = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 

          foreach (var segment in segments) 
          { 
           writer.Write(segment+";"); 
          } 
          writer.WriteLine(); 
         } 
        } 
       } 
      } 
     } 

我試着使用靜態方法

if (!string.IsNullOrEmpty(line)) 

但它不會忽略NUL行,h我能擺脫他們嗎?那個符號甚至意味着什麼?

謝謝

+0

一個評論,因爲答案隱含但沒有狀態:'這樣NUL'與ASCII值0的字符的視覺表示(實際上,我認爲每個編碼中的值爲0)。所以它是一個0字節,也被稱爲NUL字符。總的來說,我認爲看到其中一個幾乎總是一個bug,部分原因是如果給它們一個帶有NUL的字符串,很多程序就會出錯,例如CI相信使用NUL終止的字符串,所以在閱讀時可能會很好只要將它視爲第一個NUL文件的結尾)。 – Chris 2014-10-31 12:15:01

回答

2

我會改變它的東西,如:

if (!string.IsNullOrEmpty(line) && line.First() != 0x00) 
+0

這有用,謝謝! :) – Muflix 2014-10-31 12:00:50

2

嘗試使用

line = line.Trim('\0'); 
if (!String.IsNullOrEmpty(line)) 
    .... 

修剪應該刪除任何前導或尾隨從字符串nul -characters。爲了完全確保只在行尾刪除nul,使用

line = line.TrimEnd('\0'); 
+1

'NUL'不會被'Trim'視爲空白,您需要執行'Trim('\ 0')'來擺脫它們。 – Chris 2014-10-31 11:52:42

+0

爲什麼'修剪()'而不是'string.IsNullOrWhiteSpace()'? – 2014-10-31 11:56:21

+0

因爲他沒有提到.NET版本。雖然'Trim'和'TrimEnd'可以在所有版本中使用,'IsNullOrWhiteSpace'只能在4.0以上。 – 2014-10-31 11:59:22

0

嘗試System.Text.Encoding.ASCII.GetChars(new byte[] {00})Convert.ToChar(0),而不是比較。這應該給你空字符('\ 0')來比較。

+1

就像你在最後一句中使用''\ 0''不是比前兩句中的任何一句更容易嗎? – Chris 2014-10-31 11:53:51

+0

這是...只是要提到,總有幾種方法來獲得它。 ;-) – Beachwalker 2014-10-31 12:49:03