写出清单中特定的一行

本文关键字:一行 单中特 | 更新日期: 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);
       }
       .....
       ...
}