C#在文本文件中搜索字符串并返回其他字符串

C#在文本文件中搜索字符串并返回其他字符串,c#,text-files,C#,Text Files,我有许多文本文件的格式如下: tag(1008)<EX--> ------- Critical Item ------- Point taken at 06:00 NAME: OUTPUT_EXH_1_PLAN14_POINT3 Y -43.842 -43.850 0.100 0.100 0.008 + tag(1009)<EX--> ------- Critical Item -------

我有许多文本文件的格式如下:

tag(1008)<EX-->
------- Critical Item -------
Point taken at 06:00
NAME: OUTPUT_EXH_1_PLAN14_POINT3
Y       -43.842     -43.850       0.100       0.100       0.008       +     

tag(1009)<EX-->
------- Critical Item -------
Point taken at 09:00
NAME: OUTPUT_EXH_1_PLAN14_POINT4
Y       -43.825     -43.850       0.100       0.100       0.025       ++    

tag(1010)<EX-->
------- Critical Item -------
Y = ITEM 4
NAME: OUTPUT_EXH_1_PLAN14
Y       -43.838     -43.850       0.100       0.100       0.012       +     

tag(1011)<EX-->
EXH_1 Zero hole Cast to machine location
NAME: OUTPUT_EXH_1_CIRC30
Z         0.041       0.000       0.150       0.150       0.041       ++   
X        -0.035       0.000       0.150       0.150      -0.035       -     

tag(1012)<EX-->
Point taken at 06:00
NAME: OUTPUT_EXH_1_PLAN15_POINT1
Y       -23.555     -23.500       0.100       0.100      -0.055       ---
标签(1008)
-------关键项目-------
在06:00拍摄
名称:输出_EXH_1_平面14_点3
Y-43.842-43.850 0.100 0.100 0.008+
标签(1009)
-------关键项目-------
在09:00拍摄
名称:输出_EXH_1_平面14_点4
Y-43.825-43.850 0.100 0.100 0.025++
标签(1010)
-------关键项目-------
Y=项目4
名称:输出_EXH_1_平面14
Y-43.838-43.850 0.100 0.100 0.012+
标签(1011)
EXH_1零孔铸造至机器位置
名称:输出_EXH_1_约30
Z 0.041 0.000 0.150 0.150 0.041++
X-0.0350.000 0.150 0.150-0.035-
标签(1012)
在06:00拍摄
名称:输出_EXH_1_平面15_点1
Y-23.555-23.500 0.100 0.100-0.055---
实际的文本文件可能有几百行(但不到1000行)。以上只是一些行的示例。我是C#的新手,我在网上搜索了几个小时,寻找如何做我想做的事情,并找到了许多不同的方法。。。有些看起来很简单。。。有些似乎很复杂。。。我不知道哪种方法更适合我的应用。不管怎样,我发现的所有东西要么需要调整以完成我需要的工作,要么只显示我需要的部分代码,并假设我有足够的技能来理解其余的部分。有人可以帮我张贴一个完整的工作示例

我需要的是

如果上面的文本文件是“D:\myFile.txt”

我想搜索字符串“tag(1010)”

然后我想得到字符串“tag(1010)”后面的“Y”后面的第一个数字

所以我得到的数字是“myNumber=-43.838”

据我所知:

var myString = File.ReadAllLines("D:\myFile.txt")
    .SkipWhile(myString => !myString.Contains("tag(1010)<EX-->"))
    .Skip(1) // optional
    .TakeWhile(myString => !myString.Contains("tag(1011)<EX-->h"));
var myString=File.ReadAllLines(“D:\myFile.txt”)
.SkipWhile(myString=>!myString.Contains(“标记(1010)”)
.Skip(1)//可选
.TakeWhile(myString=>!myString.Contains(“tag(1011)h”);
然后我将尝试添加更多代码,从myString中提取“-43.838”。。。当然,上面的代码不起作用

    string myNumber = input.Split(new string[] {Environment.NewLine},StringSplitOptions.RemoveEmptyEntries)                                           
                           .SkipWhile((str) => !str.Trim().StartsWith("tag(1010)"))
                           .FirstOrDefault((str) => str.Trim().StartsWith("Y"))
                           .Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries)[1];
替换
输入中的
输入
。拆分


这将按换行符拆分,跳过所有行,直到找到标记(1010),查找并返回以Y开头的下一行,在空格上拆分并返回第二项
[1]
,因为第一项是我们拆分的Y。

“tag(1010)”
之后的第一个数字是
“4”
,而不是
“-43.838”
。你是说第二个号码吗?或者其他,可能是
“NAME:”
“tag(1010)”之后的第一个数字。您可以使用
var fileContents=file.ReadAllText(filePath)将文件作为字符串加载
然后使用
IndexOf
查找要查找的字符串的第一个索引,然后只需在该索引后解析字符串中的数字。请显示您到目前为止所拥有的内容,以便我们可以帮助解决问题。对不起,我的意思是在这一行的Y之后:“Y-43.838-43.850 0.100 0.100 0.012+”这一行本身将始终是一个“Y”,后跟7个空格。。。然后是我需要的数字。因此,如果标记是
“tag(1011)”
你想要数字
“-23.555”
(这与
“tag(1012)”
的数字相同,因为
“tag(1011)”
之后没有
Y
)?没有。。。最终,我希望“标签(1011)”Z为“0.041”,而“标签(1011)”X为“-0.035”。。。还有很多标签和其他东西,但现在。。。我只需要“标签(1010)”,它将始终是一个“Y”,将始终是一个负5位数字…好的。。。我要去试试这个。。。可能要花我一分钟的时间…我试着让它看起来更干净一点,希望它在visual studio中更容易阅读:)用什么替换输入?。。。喜欢“var myString=File.ReadAllLines(“D:\myFile.txt”)”。。。?然后用“myString”替换输入…?对不起,我没注意到你读了所有的行。只需使用
File.ReadAllText(“D:\myFile.txt”)
即可,但只需将输入替换为itsays就无法从字符串转换为字符