C#无法读取文件中的某些字符

时间:2015-06-16 02:30:55

标签: file encoding streamreader

这里是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)

我注意到的是,如果周围有中文,字母甚至不是字母,例如我尝试了条件line.Substring(0,1)==“R”,它找不到那些行。< / p>

无论我做什么,我的代码都只会返回

XPR111VR
F2/3XRPR144KS, XRPR145KS, XRPR146KS

我真的需要能够提取每条R和E线。

2 个答案:

答案 0 :(得分:0)

我只是尝试将整个文档复制到记事本中并将编码放入UTF8中, 似乎后来工作但不确定它是否可靠。

答案 1 :(得分: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();
        }


    }