嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下。
Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO
我需要阅读文本,仅提取Name='What ever text'
之后的值。
所以我期望输出为Check_Amt
,DBO
我需要在C#中完成
答案 0 :(得分:4)
当查询 数据(例如文件行)时, Linq 通常是一种方便的工具;如果文件中有行
name=value
格式,您可以像这样查询它
name, value
对代码:
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答案会更好,恕我直言。