我有一个大文件,我把那个文件分成2组: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);
}


在这里,您可以解析行数据以查找节省的数据,并可以写出所需的任何数据。

解析字符串基本上只是将字符串数据分成不同的部分,以尝试获取所需的数据。但是,由于您只是在寻找百分比,因此请查看上面的代码以获取更多示例

10-06 13:27