写出清单中特定的一行
本文关键字:一行 单中特 | 更新日期: 2023-09-27 17:52:49
我有一个大文件,我把它分成两组:a和b。下面是文件中每一行的示例:
5/21/2015 11:55:56 PM | Batch 6|386/767|50.33 %|CH2M-R|Processed NXRMN5...Checking refundable and non-refundable fares. Traditional Booking. Inside ticketing window. Minimum Savings Required: $131.00. Actual Savings: $257.18. Savings found: $257.18 (11.55 %). Savings were previously found.
简而言之,我正在编写一个程序,它将查找a组和B组,如果一行有"Savings found:",它将写出该行。同样,如果该文件有30%或以上的储蓄,它会在这一行加上1个星号,如果它有30%或以上的储蓄和500美元或以上的储蓄,它会写出2个星号。为了澄清,257.18是发现的节省量,而该数字旁边的百分比是必须找到的百分比。
这是我目前看到的if语句,我只需要在if语句里面的代码:
if (a.Any(item => item.Contains("Savings found:"))
{
}
我是c#的新手,我不知道如何使控制台编写具有这些要求的特定代码行。任何帮助将不胜感激!
我想我们是在帮助学校的一个项目。昨天有几个问题涉及几乎完全相同的问题和数据。
同时,由于您希望迭代结果集以查找确切的节省,因此我建议使用以下方法,而不是使用"if"。使用"Where"查询将执行与"Any"相同的操作,但将返回一个集合,而不是布尔值。直接进入"foreach"也可以节省一步。
var find = "Savings found:";
foreach(var line in a.Where(w => w.Contains(find))
{
var subStr = line.Substring(0, line.IndexOf(find)+find.Length);
var startIndex = subStr.IndexOf('(');
var endIndex = subStr.IndexOf(')');
var savings = double.Parse(subStr.SubString(0, startIndex-1).Trim());
var percent = double.Parse(subStr.SubString(startIndex+1, endIndex-startIndex-2).Trim());
Console.WriteLine("{0}{1}{2}", (percent >= 30) ? "*" : string.Empty,
(percent >= 30 && savings >= 500) ? "*" : string.Empty,
line);
}
从这里你可以解析行数据找到节省,你可以写出任何你需要的数据。
解析字符串基本上只是将字符串数据分解成不同的部分,以尝试获得您想要的数据。但是,由于您只是在寻找百分比,请检查上面的代码以获得进一步的示例Any方法只会告诉您集合中的任何一项是否符合所提供的标准。
使用Foreach可以更好地循环条目:
a.ForEach(item => { if (item.Contains("Savings found:")) { Console.WriteLine(item); } });
这将检查a中的每个项目。如果项目包含字符串Savings found:
,它将在控制台上打印该项目。
已经有一段时间没有做太多的c#了,但是假设你只是想写控制台,像这样:
foreach (string myLine in A)
{
if (myLine.Contains("Savings found:") == true)
{
Console.WriteLine(myLine);
}
if...(further code to deal with 30%+ savings, etc...)
{
Console.WriteLine("*" + myLine);
}
.....
...
}