如何从文本文件中读取和分析特定的整数值,并将其添加到 c# 中的列表框中
本文关键字:添加 列表 整数 文件 文本 读取 | 更新日期: 2023-09-27 17:57:00
我想知道如何从文本文件中读取和解析特定的整数值,并将其添加到 C# 中的 Listbox。例如,我有一个文本文件MyText.txt如下所示:
<>
101
192
-
399
~
99
128
-
366
~
101
192
-
403
~
我想解析"-"和"~"之间的整数值,并将其中的每一个添加到列表框中的项目,例如:
#listBox1
399
366
403
请注意,每行值由回车符和换行符分隔。顺便说一下,它是通过RS-232串行通信从微控制器传输的数据。抱歉,我只是 c# 编程新手。提前谢谢。
下面是使用 LINQ 执行此操作的一种方法:
bool keep = false;
listBox1.Items.AddRange(
File.ReadLines("MyText.txt")
.Where(l =>
{
if (l == "-") keep = true;
else if (l == "~") keep = false;
else return keep;
return false;
})
.ToArray());
你可以使用正则表达式,如下所示:
var s = System.Text.RegularExpressions.Regex.Matches(stringtomatch,@"(?<=-'s*)[0-9]+'b(?='s*~)");
正则表达式基本上寻找一个数字。然后,它会检查后面的字符,查找可选的空格和短划线 (-)。然后它匹配所有数字,直到遇到另一个非单词字符。它检查一个可选的空格,然后检查一个必需的~(不知道这叫什么)。此外,它只返回数字(不返回空格和符号)。
所以基本上这个方法返回一个匹配列表。 然后你可以像这样使用它:
for (int i = 0; i < s.Count; i++)
{
listBox1.Items.Add(s[i]);
}
编辑:
正则表达式中的拼写错误并更新了循环(由于某种原因,foreach 不适用于 MatchCollection)。
您可以尝试运行此测试脚本:
var stringtomatch = " asdjasdk jh kjh asd'n-'n123123'n~'nasdasd";
var s = System.Text.RegularExpressions.Regex.Matches(stringtomatch,@"(?<=-'s*)[0-9]+'b(?='s*~)");
Console.WriteLine(stringtomatch);
for (int i = 0; i < s.Count; i++)
{
listBox1.Items.Add(s[i]);
}
尝试
List<Int32> values = new List<Int32>();
bool open = false;
String[] lines = File.ReadAllLines(fileName);
foreach(String line in lines)
{
if( (!open) && (line == "-") )
{
open = true;
}
else if( (open) && (line == "~") )
{
open = false;
}
else if(open)
{
Int32 v;
if(Int32.TryParse(line, out v))
{
values.Add(v);
}
}
}
Listbox.Items.AddRange(values);
这是一段简单的代码,用于读取文件,转换为整数(尽管您可以保留字符串)和处理列表。应从一些基本的 .NET/C# 教程开始。
编辑:若要将值添加到列表框,可以使用 .NET 3.5 切换到values.ForEach(v => listbox.Items.Add(v.ToString())
。否则,你自己做一个。