如何从日志文件字符串中删除日期时间
本文关键字:删除 日期 时间 字符串 文件 日志 | 更新日期: 2023-09-27 18:29:51
我有一个这样的日志文件:
[2016 01 10 11:10:44]操作3''r''n
[2016 01 10 11:10:40]操作2''r''n
[2016 01 10 11:10:36]操作1''r''n
在上面,我执行readAlllines操作,这样在字符串中我就有:
[2016 01 10 11:10:44]操作3''r''n[2016 01 11 11:10:40]操作2''r''n 2016 01 10 11:10:36]操作1''r''n
现在我必须删除所有这些时间戳。
作为一个新手,为了安全起见,我会把它分开,在每个项目上搜索start=indexOf("[")和indexOf。
我想知道一个更聪明的方法。
--编辑--好吧,我没有考虑所有的事情。附加约束:
- 我不能确定所有行都有时间戳的事实,所以我必须检查每行是否有"时间戳";["开始"和a"]";在中间
- 我甚至不能确定[XXXX]的长度,因为我可以用[2016 1 1 11:1:4]而不是[2016 01 01 11:01:04]。所以检查它的长度很重要
感谢
您不需要剪切/粘贴行,可以使用字符串替换。这考虑了Environment.NewLine.的长度
while(true)
{
int start;
if (lines.Substring(0,1) == "[")
start = 0;
else
start = lines.IndexOf(Environment.NewLine + "[") + Environment.NewLine.Length;
int end = lines.IndexOf("] ");
if (start == -1 || end == -1)
break;
string subString = lines.Substring(start, end + 2 - start);
lines = lines.Replace(subString, "");
}
string[] lines = File.ReadAllLines("log.txt");
foreach (string line in lines)
{
string logContents = line.SubString("[XXXX XX XX XX:XX:XX] ".Length);
}
或者将其与linq Select结合起来,一步完成
var logContentsWithoutTimestamps = File.ReadAllLines("log.txt")
.Select(x => x.SubString("[XXXX XX XX XX:XX:XX] ".Length);
如果没有一致的格式,您将需要确定您正在寻找的内容。我会写一个正则表达式来删除你正在查找的内容,否则你可能会被你意想不到的事情所困扰(例如,你提到有些行可能没有时间戳——它们可能有其他放在方括号里的东西,而你不想删除)。
示例:
Regex rxTimeStamp = new Regex("^'['d{4} 'd{2} 'd{2} 'd{1,2}:'d{1,2}:'d{1,2}']'s*");
string[] lines = File.ReadAllLines("log.txt");
foreach (string line in lines)
{
string logContents = rxTimeStamp.Replace(line, String.Empty);
}
// or
var logContentsWithoutTimestamps = File.ReadAllLines("log.txt")
.Select(x => rxTimeStamp.Replace(x, String.Empty));
您需要根据正则表达式是否遗漏任何内容来调整它,但这超出了这个问题的范围。
由于您的代码可以工作,并且您可以搜索一些不同的方式:
string result = string.Join(string.Empty, str.Skip(22));
对于每个项目
说明:由于每个时间戳的长度相等,所以不需要搜索开始或结束。通常情况下,您必须进行长度检查(空行等),但这甚至适用于较小的字符串-如果大小为<22.如果你的文件真的只包含时间戳,那就另选一种方式。