从文件读取C#-整数并忽略其他所有内容

时间:2019-03-14 22:43:46

标签: c#

我有一个config.txt文件,看起来像这样

some text here = 5
another text line here = 4 with random garbage
some other line = 2 5 some number 12
7
foo bar 9

为澄清起见,仅在“ =”之后的数字。只是在“ =“

之后出现的那个数字

我希望只能在“ =”之后提取整数。因此,在这种情况下,输出应类似于

5
4
2

我以前在C ++中使用类似的方法完成此操作

if (file_to_read.is_open()) {
        file_to_read.ignore(numeric_limits<streamsize>::max(), '='); 
        while (file_to_read >> input) { 
            values.push_back(input);
            file_to_read.ignore(numeric_limits<streamsize>::max(), '=');
        }
        file_to_read.close();

我想了解您在C#中的操作方式,如果有任何文档可以参考

2 个答案:

答案 0 :(得分:0)

我们在这里:

string input =
@"some text here = 5
another text line here = 4 with random garbage
some other line = 2 5 some number 12
7
foo bar 9";

var matches = Regex.Matches(input, @"(?:.*(?<==).*)(\d+)");
foreach(Match match in matches)
{
    Console.WriteLine(match.Groups[1]);
}

输出:

5
4
2

对于正则表达式,会发生以下情况: 对任意符号进行非选择性的多次查找,后跟“ =”号:

(?:.*(?<==).*)

这是用于匹配数字的

(\d+)

不客气。 =)

答案 1 :(得分:0)

使用正则表达式,过程并不太复杂。读取流时进行过滤似乎太复杂了。只需执行以下操作即可:

  • 将文本文件读取为单个字符串
  • 使用正则表达式搜索包含文字" = "字符串和数字字符\d+的模式。
  • 将表达式的数字部分放在圆括号中,可以将其捕获为组#1,您可以将其从Match对象中提取为m.Groups[1].Value
  • 每个找到的整数都会被解析并添加到整数列表中
  • 操作后,将返回列表。

    public static List<Int32> ExtractInts(String filePath)
    {
        String input = File.ReadAllText(filePath);
        List<Int32> ints = new List<Int32>();
        Regex r = new Regex(" = (\\d+)");
        MatchCollection mc = r.Matches(input);
        foreach(Match m in mc)
            ints.Add(Int32.Parse(m.Groups[1].Value));
        return ints;
    }