2014-10-31 251 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