C# 从具有特定模式的文本文件中读取文本
嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下所示C# 从具有特定模式的文本文件中读取文本,c#,C#,嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下所示 Name=Check_Amt Public=Yes DateName=pp Name=DBO 我需要阅读文本,只提取Name='What ever text'后面的值 所以我希望输出为Check_Amt,DBO 当查询数据(例如文件行)时,我需要在C中执行此操作Linq通常是一个方便的工具;如果文件中有行 name=value 格式,可以这样查询 读取文件行 将每行拆分为名称、值对 按名称筛选对 从每对中提取值 将值具体化到
Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO
我需要阅读文本,只提取Name='What ever text'后面的值
所以我希望输出为Check_Amt,DBO
当查询数据(例如文件行)时,我需要在C中执行此操作Linq通常是一个方便的工具;如果文件中有行
name=value
格式,可以这样查询
读取文件行
将每行拆分为名称、值对
按名称筛选对
从每对中提取值
将值具体化到集合中
代码:
最后,如果需要逗号分隔的字符串,请连接以下值:
您可以使用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])
我认为最好的例子是正则表达式
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的答案会更好。另一种方式:
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));
}
}
它只是一个纯文本文件还是一个xml、json文件?是像您展示的那样都是一行,还是每行一个赋值。考虑使用{}按钮来格式化您的示例。您尝试了什么?逐行读取文件,如果文件以Name=开头,则在第五个字符后打印该行的所有文本?这是一个文本文件,每个内容都是单独的一行您是否已尝试打开文件并读取行?如果是这样的话,请将您编写的代码发布到现在。[显示您的努力!并显示您的问题!]投票将是最好的选择。在这种简单的情况下,我非常喜欢String.StartsWith,而不是复杂的正则表达式解决方案或其他过度工程的东西。当然,有一个工具,可以做任何事情,以及,但你不需要它!很高兴听到这个消息。如果你认为我的回答有帮助,我将不胜感激。
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);
}
}
}
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));
}
}