从具有特定模式的文本文件中读取文本

时间:2019-09-25 13:16:43

标签: c#

嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下。

Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO

我需要阅读文本,仅提取Name='What ever text'之后的值。

所以我期望输出为Check_AmtDBO

我需要在C#中完成

4 个答案:

答案 0 :(得分:4)

当查询 数据(例如文件行)时, Linq 通常是一种方便的工具;如果文件中有行

name=value

格式,您可以像这样查询它

  1. 读取文件行
  2. 每行分成name, value
  3. 过滤器对按其名称
  4. 从每对
  5. 提取
  6. 值材料化为一个集合

代码:

using System.Linq;

...

// string[] {"Check_Amt", "DBO"}
var values = File 
  .ReadLines(@"c:\MyFile.txt")
  .Select(line => line.Split(new char[] { '=' }, 2)) // split into name, value pairs
  .Where(items => items.Length == 2)                 // to be on the safe side
  .Where(items => items[0] == "Name")                // name == "Name" only
  .Select(items => items[1])                         // value from name=value
  .ToArray();                                        // let's have an array

最后,如果要用逗号分隔string,请Join values

// "Check_Amt,DBO"
string result = string.Join(",", values);

答案 1 :(得分:2)

另一种方式:

var str = @"Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO";

var find = "Name=";
var result = new List<string>();
using (var reader = new StringReader(str)) //Change to StreamReader to read from file
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.StartsWith(find))
            result.Add(line.Substring(find.Length));
    }
}

答案 2 :(得分:0)

您可以使用LINQ选择所需的内容:

var names=File. ReadLines("my file.txt" ).Select(l=>l.Split('=')).Where(t=>t.Length==2).Where(t=>t[0]=="Name").Select(t=>t[1])

答案 3 :(得分:0)

我认为最好的情况是正则表达式。

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=Name=).*?(?=Public)";
        string input = @"Name=Check_Amt Public=Yes DateName=pp Name=DBO";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

编辑:我的答案是在纠正您的问题之前写的,尽管它仍在工作,但LINQ答案会更好,恕我直言。