2014-10-31 2 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, ч ow я могу избавиться от них? Что означает этот символ?

Спасибо

+0

Один комментарий, так как ответы подразумевается, но не состояние: 'NUL' как это визуальное представление символа со значением 0 в ASCII (и на самом деле я думаю, значение 0 в каждой кодировке). Таким образом, это 0 байт и также называется символом NUL. В общем, я считаю, что один из них почти всегда является ошибкой где-то, отчасти потому, что многие программы идут ужасно неправильно, если вы даете им строку с NUL в ней (например, CI полагает, что NUL завершает строки, поэтому при чтении это может хорошо просто рассмотрите его в конце файла при первом NUL). – Chris

ответ

2

Я хотел бы изменить его на что-то вроде:

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

Это работает, спасибо! :) – Muflix

2

Попробуйте использовать

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

Обрезать следует удалить любой передней или задней nul -характеры из строки. Чтобы быть полностью уверены, что только удалить nul на конце строки, используйте

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

'NUL' не считается пробелом' Trim', вам нужно сделать 'Trim ('\ 0')', чтобы избавиться от них. – Chris

+0

Почему 'Trim()' вместо 'string.IsNullOrWhiteSpace()'? –

+0

Потому что он не упомянул версию .NET. Хотя 'Trim' и' TrimEnd' доступны во всех версиях, 'IsNullOrWhiteSpace' присутствует только с 4,0. –

0

Попробуйте сравнить с System.Text.Encoding.ASCII.GetChars(new byte[] {00}) или Convert.ToChar(0) вместо этого. Это должно дать вам нулевой символ ('\ 0') для сравнения.

+1

Не проще ли использовать '' \ 0'', как в последнем предложении, чем в первом из двух? – Chris

+0

Это ... просто упомянуть, что всегда есть несколько способов его получить. ;-) – Beachwalker

Смежные вопросы