写出列表的特定行
Writing out a specific line of a list
我有一个大文件,我把那个文件分成了 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: 1.00. Actual Savings: 7.18. Savings found: 7.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# 的新手,我不知道如何让控制台编写具有这些要求的特定代码行。任何帮助将不胜感激!
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);
}
.....
...
}
我想我们正在帮助这里的一个学校项目。昨天有几个问题涉及几乎完全相同的问题和数据。
同时,由于您想迭代结果集以寻找确切的节省,我建议使用以下方法,而不是使用 "if"。使用 "Where" 查询将执行与 "Any" 相同的操作,但 return 将是一个集合,而不是布尔值。直接进入 "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);
}
从这里您可以解析行数据以找到节省的部分,并且可以写出您需要的任何数据。
解析字符串基本上就是将字符串数据分解成不同的部分来尝试获取你想要的数据。但由于您只是在寻找百分比,请查看上面的代码以获取更多示例
我有一个大文件,我把那个文件分成了 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: 1.00. Actual Savings: 7.18. Savings found: 7.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# 的新手,我不知道如何让控制台编写具有这些要求的特定代码行。任何帮助将不胜感激!
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);
}
.....
...
}
我想我们正在帮助这里的一个学校项目。昨天有几个问题涉及几乎完全相同的问题和数据。
同时,由于您想迭代结果集以寻找确切的节省,我建议使用以下方法,而不是使用 "if"。使用 "Where" 查询将执行与 "Any" 相同的操作,但 return 将是一个集合,而不是布尔值。直接进入 "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);
}
从这里您可以解析行数据以找到节省的部分,并且可以写出您需要的任何数据。
解析字符串基本上就是将字符串数据分解成不同的部分来尝试获取你想要的数据。但由于您只是在寻找百分比,请查看上面的代码以获取更多示例