如何解决C#在文本文件中搜索字符串并返回其他字符串
我有很多这样的文本文件格式:
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 ---
实际的文本文件可能是几百行(但少于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"));
然后,我将尝试添加更多代码以从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];
将input
替换为input.Split
这将由换行符分隔,跳过所有行,直到找到tag(1010),查找并返回以Y开头的下一行,以空格分隔并返回第二项[1]
,因为第一项为Y我们继续前进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。