从C#中的文件中读取一系列数字

时间:2012-04-20 11:11:49

标签: c# .net windows

我目前有一个从文件中读取整数的方法,一旦达到16个整数,就会对字符串(寄存器)运行正则表达式。虽然从文件中读入整数(或数字)的方式导致了我的问题。它目前从文件中读取所有数字,并忽略任何其他字符,如字母。因此,将收集以下内容:

example.txt中:

  

h568fj34fj390fjkkkkf385837692g1234567891011121314fh

输出错误:

  

5683439038583769

正确输出:

  

1234567891011121

但是我只想收集一串连续的数字(如果有其他字符,例如数字之间的字母,则不会被计算),这个方法对于一系列数字(总共16个)没有其他字符喜欢中间的字母。

我目前的逻辑如下:

    var register = new StringBuilder();

    using(var stream = File.Open(readme.txt, FileMode.Open))
    {
                bool execEnd = false;
                bool fileEnded = false;

                int buffer;
                while(execEnd = true)
                {
                while(register.Length < 16 && !fileEnded)
                    {
                buffer = stream.ReadByte();
                if(buffer == -1)
                {
                fileEnded = true;
                break;
                }

     var myChar = (char)buffer;
     if(Char.IsNumber(myChar))
    register.Append(myChar);
      }

2 个答案:

答案 0 :(得分:4)

这应该是您所需的正则表达式:\d{16}

所以你可以使用LINQ查找所有匹配项:

var allMatches = 
     System.IO.File.ReadLines(path)
    .Select(l => System.Text.RegularExpressions.Regex.Match(l, @"\d{16}"))
    .Where(m => m.Success)
    .ToList();

foreach (var match in allMatches)
{
    String number = match.Value;
}

答案 1 :(得分:1)

string input = "h568fj34fj390fjkkkkf385837692g1234567891011121314fh";
string num = System.Text.RegularExpressions.Regex.Match(input, @"\d{16}").Value;