C# 用C语言从文件中读取一系列数字#

C# 用C语言从文件中读取一系列数字#,c#,.net,windows,C#,.net,Windows,我目前有一个从文件中读取整数的方法,当达到16整数时,将针对字符串(寄存器)运行正则表达式。尽管从文件中读取整数(或数字)的方式给我带来了问题。它当前读取文件中的所有数字,并忽略任何其他字符,如字母。因此,将收集以下信息: Example.txt: H568FJ34FJ390FJKKF38837692G123456789101121314FH 输出不正确: 568343903583769 正确输出: 123456789101121 但我只想收集一个连续的数字字符串(如果在数字之间有其他字符,如字

我目前有一个从文件中读取整数的方法,当达到16整数时,将针对字符串(寄存器)运行正则表达式。尽管从文件中读取整数(或数字)的方式给我带来了问题。它当前读取文件中的所有数字,并忽略任何其他字符,如字母。因此,将收集以下信息:

Example.txt:

H568FJ34FJ390FJKKF38837692G123456789101121314FH

输出不正确:

568343903583769

正确输出:

123456789101121

但我只想收集一个连续的数字字符串(如果在数字之间有其他字符,如字母,则它们不会被计算),并且该方法将用于一系列数字(总共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);
      }
var寄存器=新的StringBuilder();
使用(var stream=File.Open(readme.txt,FileMode.Open))
{
bool execEnd=false;
bool fileend=false;
int缓冲区;
while(execEnd=true)
{
while(register.Length<16&&!fileend)
{
buffer=stream.ReadByte();
如果(缓冲区==-1)
{
fileend=true;
打破
}
var myChar=(char)缓冲区;
if(字符IsNumber(myChar))
register.Append(myChar);
}

这应该是您所需的正则表达式:
\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;
}

这应该是您所需的正则表达式:
\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;
}

您好,谢谢,但我需要计算的不是寄存器,而是数字在第一个寄存器字符串中的方式place@user1326461:恐怕我什么都不懂。LINQ查询只选择至少有一个匹配号码的行。如果您不想直接选择
匹配
,而是选择字符串号码,您只需要要将代码的4.1行更改为
。其中(m=>m.Success)。请选择(m=>m.Value)
。您好,谢谢,但我需要计算的不是寄存器,而是数字如何首先进入寄存器字符串place@user1326461:恐怕我什么都不懂。LINQ查询只选择至少有一个匹配号码的行。如果您不想选择
匹配
,而是直接选择字符串号码,请st必须将代码的4.1行更改为
。其中(m=>m.Success)。选择(m=>m.Value)