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