C# 写出列表中的一行

C# 写出列表中的一行,c#,if-statement,file-io,console,C#,If Statement,File Io,Console,我有一个大文件,我把它分成两组: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

我有一个大文件,我把它分成两组: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组,如果一行有“储蓄发现”,它将写出该行。此外,如果该文件节省了30%或更高,它将写出该行并在前面放一个星号,如果节省了30%或更高,以及500美元或更高,它将写出两个星号。为了澄清,257.18是发现的节约金额,该数字旁边的百分比是必须找到的百分比

这是我到目前为止得到的if语句,我只需要if语句内部的代码:

if (a.Any(item => item.Contains("Savings found:"))
{

}

我是c#新手,不知道如何让控制台编写满足这些要求的特定代码行。任何帮助都将不胜感激

Any方法只会告诉您集合中的任何项目是否符合提供的条件

您可以使用Foreach更好地循环项目:

a.ForEach(item => { if (item.Contains("Savings found:")) { Console.WriteLine(item); } });

这将检查a中的每个项目。如果项目包含字符串
Savings found:
,它将在控制台上打印项目。

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);
       }
       .....
       ...
}
已经有一段时间没有做过太多的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);
       }
       .....
       ...
}

我想我们正在帮助学校的一个项目。昨天有几个问题涉及几乎完全相同的问题和数据

同时,由于您希望迭代结果集以查找确切的节省,因此我建议使用以下方法,而不是使用“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);
} 
从这里,您可以解析行数据以找到节省,并且您可以写出您需要的任何数据


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

我认为我们正在帮助学校开展一个项目。昨天有几个问题涉及几乎完全相同的问题和数据

同时,由于您希望迭代结果集以查找确切的节省,因此我建议使用以下方法,而不是使用“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);
} 
从这里,您可以解析行数据以找到节省,并且您可以写出您需要的任何数据


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

任何
都会告诉您该行是否包含该百分比,只需在a上使用一个普通的foreach,然后对每个项目执行所需操作您是C#新手,并且您编写了一段很好的
LINQ
语句。奇怪的好的,但我如何实现总体目标:让控制台写出那些特定的代码行,并在带有requirements@Rahul花了3个小时的研究才发现,LINQ到底是什么?@Rahul在过去几天里还发布了其他几个问题,其中有一行与
文件中的
完全相同的示例行。我猜想他已经在这方面工作了好几天了,用StackOverflow来回答一些简单的问题。
Any
会告诉你,如果行中包含了这些,只需在a上使用一个普通的foreach,然后对每个项目做你想做的事情。你是C#的新手,你写了一篇很好的
LINQ
语句。奇怪的好的,但我如何实现总体目标:让控制台写出那些特定的代码行,并在带有requirements@Rahul花了3个小时的研究才发现,LINQ到底是什么?@Rahul在过去几天里还发布了其他几个问题,其中有一行与
文件中的
完全相同的示例行。我猜想他已经在这方面工作了好几天,并使用StackOverflow来回答简单的问题。这是一个部分解决方案:您必须使用正则表达式来找出储蓄金额以及百分比,以便添加一个或多个asterics@DmitryBychenko您是否愿意提供一个使用正则表达式的百分比示例?我已经想了一段时间了,但我没有接近一个解决方案。这是一个部分解决方案:你必须使用正则表达式来计算储蓄金额以及百分比,以便添加一个或多个asterics@DmitryBychenko您是否愿意提供一个使用正则表达式的百分比示例?我想弄明白这一点已经有一段时间了,但我还没有接近解决方案。这真是太棒了,只是我有一个问题:当我运行这个时,它给了我:System.ArgumentOutOfRangeException:长度不能小于零。我不认为我们必须指定长度?这真是太棒了,除了我只有一个问题:当我运行这个时,它给了我:System.ArgumentOutOfRangeException:长度不能小于零。我不认为我们必须指定长度?