C#Linq和Regexing非unicode

时间:2013-11-05 17:29:17

标签: c# regex linq unicode

我正在编写一个程序,它将从AS400获取数据并需要读取文本的第一行以确定文件的位置。来自AS400的数据中包含许多不可打印的字符。

这是我的工作代码:

//LINQ to read first line and find what I need
var lines = File.ReadAllLines(as400file);
foreach (string line in lines)
{
    //Regex the AS400 garbage out of there...
    string replaced = Regex.Replace(line, @"[^\u0000-\u007F]", String.Empty);
    /*  ^ = not
    *  \u0000 - \u007F is the first 127 chars of UTF-8
    *  So this replaces all non ascii chars with an empty string
    */

    //Rest of program code
}

但是我真的只想要文件的第一行而不是每一行。我似乎无法想到一种方法来获得第一线,而我对linq没有经验。有什么指示或帮助吗?

4 个答案:

答案 0 :(得分:1)

var line = File.ReadAllLines(as400file).First(line => !string.IsNullOrWhitespace(line));
string replaced = Regex.Replace(line, @"[^\u0000-\u007F]", String.Empty);

是......你想要的只是什么?

答案 1 :(得分:1)

尝试以下操作,它将从文件中读取一行。

string line;

using (var file = new StreamReader(as400file))
{
    line = file.ReadLine();
}

string replaced = Regex.Replace(line, @"[^\u0000-\u007F]", String.Empty);

答案 2 :(得分:0)

作为Alex答案的替代方案,您可以使用StreamReader获取第一行:

using (var reader = new System.IO.StreamReader(as400File))
{
    var line = reader.ReadLine();
    string replaced = Regex.Replace(line, @"[^\u0000-\u007F]", String.Empty);
}

答案 3 :(得分:0)

感谢Alex的帮助,这是我的工作代码:

//LINQ to read first line and find what I need
var lines = File.ReadAllLines(testfile).First(line => !string.IsNullOrWhiteSpace(line));
//Regex the AS400 garbage out of there...
string replaced = Regex.Replace(lines, @"[^\u0000-\u007F]", String.Empty);
/*  ^ = not
 *  \u0000 - \u007F is the first 127 chars of UTF-8
 *  So this replaces all non ascii chars with an empty string
 */