2015-06-16 7 views
0

Новое в C# здесь, я провел некоторое исследование по этой проблеме, но ничего не нашел, без словарного запаса.C# Невозможно прочитать некоторые символы из файла

Моя задача - прочитать огромный файл и извлечь только строки, которые следуют условиям.

код, я использую, чтобы проверить некоторые вещи:

using (StreamReader sr = new StreamReader("SPDS_Test.doc")) 
{ 
    while ((line = sr.ReadLine()) != null) 
    { 
     try 
     { 
      if (line.Contains("R ") | line.Contains("E ")) 
      { 
       data = line; 
       data = data.Remove(0, 1); 
       data= data.Replace(" ", "").Replace("N", "").Replace("+", ",").Replace("·", ",").Replace("?", ",").Replace("(", "").Replace(")", ""); 
       Data.Add(data); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("--------", e); 
      Console.WriteLine("--------Press any to continue---------"); 
      Console.ReadKey(); 
     } 
    } 

    foreach (string d in Data) 
    { 
     Console.WriteLine(d); 
     Console.ReadKey(); 
    } 
} 

Это часть файла:

R XRPA168VC 
B A 
L 手动紧急停堆 
E XRPA300KS 
A 反应堆停堆 汽轮机停机 

R XRPR111VR 
B IP 
E F2/3(XRPR144KS, XRPR145KS, XRPR146KS) 

То, что я заметил, что письма даже не письмо, если китайский вокруг него, например, я попробовал строку условия. Substring (0,1) == "R", он не мог найти эти строки.

Независимо от того, что я делаю, мои коды только вернуть бы этот

XPR111VR 
F2/3XRPR144KS, XRPR145KS, XRPR146KS 

мне действительно нужно, чтобы иметь возможность извлекать каждый R и E линий.

+0

Вы должны использовать ту же кодировку, которая использовалась для вывода файла. – xxbbcc

ответ

0

Я просто попытался скопировать весь документ в блокнот и поместить кодировку в UTF8, , похоже, работает позже, но не уверен, что он надежный.

0

Попробуйте это ... это работает

using (StreamReader sr = new StreamReader("SPDS_Test.doc")) 
    { 
      string line; 
      string data; 
      List<string> Data = new List<string>(); 
      while ((line = sr.ReadLine()) != null) 
      { 
       var utf8 = Encoding.UTF8; 
       byte[] utfBytes = utf8.GetBytes(line); 
       string myString = utf8.GetString(utfBytes, 0, 
       utfBytes.Length); 
       try 
       { 


        if (myString.Contains("R ") || myString.Contains("E ")) 
        { 

         data = line; 
         data = data.Remove(0, 1); 
         data= data.Replace(" ", "").Replace("N", 
         "").Replace("+", ",").Replace("·", ",").Replace("?", 
         ",").Replace("(", "").Replace(")", ""); 
         Data.Add(data); 
        } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("--------", e); 
       Console.WriteLine("--------Press any to continue---------"); 
       Console.ReadKey(); 
      } 
     } 

     foreach (string d in Data) 
     { 
      Console.WriteLine(d); 
      Console.ReadKey(); 
     } 


    } 
+0

Просто позаботьтесь о пространстве после R или E, которое вы хотите проверить. В моем примере я просто использовал одно пространство после R и E – Megha