【发布时间】:2020-06-14 06:54:16
【问题描述】:
所以我的文本文件结构如下:
Date: 12/23/23
.
.
.
Date: 12/23/66
.
.
Date: 12/25/67
为此,我试图获取日期的最后一次发生,即:
Date: 12/25/67
有了这个,我已经知道如何通过这段代码:
string date = "";
foreach(string line in File.ReadAllLines("mytext.txt"))
{
date = GetDate_value(line, date);
}
public static string GetDate_value(string line, string date)
{
if (line.Contains("Date:"))
{
date = line;
}
string[] separatingStrings = { "Date: " };
string[] str = date.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("[{0}]", string.Join(", ", str));
return str.Last();
}
有了这个,当我返回日期时,我得到了最后一次出现。但是,我试图将其进一步解析到仅包含 12/25/67 的位置。
有了这个,我知道上面的逻辑是怎么回事。但是,当我尝试解析文件时,我得到一个错误,说元素中的数组不存在。进一步检查显示与我的Console.WriteLine的数组显示:
[]
[]
[]
[]
[ , 12/25/67]
[ , 12/25/67]
[ , 12/25/67]
[ , 12/25/67]
.
.(repeats for how many lines in text file)
我想知道为什么我在开头部分没有任何元素,而一切都应该是:
[ , 12/25/67]
[ , 12/25/67]
[ , 12/25/67]
[ , 12/25/67]
我尝试使用它来替换 foreach 行:
foreach (string line in File.ReadAllLines(file).Where(line => !string.IsNullOrWhiteSpace(line)))
但是它仍然没有忽略最后一行。我将如何使它在开始时忽略 null 元素?
编辑
所以在获取日期函数中使用这个 if 语句:
string[] separatingStrings = { "Date: " };
string[] str = date.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
if(str.Length == 0)
{
Console.WriteLine("null");
}
我发现这些values([]) 的长度为 0,那么我怎么能跳过长度为 0 的数组来忽略它?
【问题讨论】:
-
如果你知道格式,你可以简单地使用 C# 的 Remove 方法,一旦你得到该行
-
您能进一步解释一下吗?
-
你得到 Date: 12/25/67 所以你可以删除 Date: 从字符串中
-
这可以帮助你
string str = File.ReadLines("test.txt").Where(s => s.Contains("Date:")).ToList().Last().Remove(6);。你必须处理null案件 -
你不是已经问过类似的question了吗?