我有一个简单的程序,它读取日志文本文件并尝试解析它。
该程序可以通过“----------------------”来“分组”/解析日志文本文件,我试图使用“.split”方法,但它不起作用。
基本上如果可能,我希望程序将文本文件从每个“----------------”分组到“----------- ----“对于其他进程。
有人可以就代码提出建议吗?谢谢!
我的代码:
class Program
{
static void Main(string[] args)
{
System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("C:\\Syscrawl\\new.txt");
foreach (String r in lines.Skip(7))
{
String[] token = r.Split('-');
foreach (String t in token)
{
Console.WriteLine(t);
}
}
}
}
文本文件的示例;
Restore Point Info
Description : Installed Apache HTTP Server 2.2.16
Type : Application Install
Creation Time : Thu Dec 9 08:04:46 2010
C:\syscrawl\Restore\RP10\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500
Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description : Testing 0
Type : System CheckPoint
Creation Time : Thu Dec 9 08:05:43 2010
C:\syscrawl\Restore\RP11\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500
Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description : Installed Python 2.4.1
Type : Application Install
Creation Time : Thu Dec 9 08:09:12 2010
C:\syscrawl\Restore\RP12\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500
Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description : Installed AccessData FTK Imager.
Type : Application Install
Creation Time : Thu Dec 9 08:14:02 2010
C:\syscrawl\Restore\RP13\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500
Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
答案 0 :(得分:2)
一个相当简单的迭代器可以为你提供一系列分隔线之间的行集:
static IEnumerable<IList<string>> ParseLines(IEnumerable<string> lines)
{
var lineSet = new List<string>();
foreach(var line in lines)
{
if(line.StartsWith("----"))
{
yield return lineSet;
lineSet = new List<string>();
}
else
{
lineSet.Add(line);
}
}
}
答案 1 :(得分:0)
您的问题是您要分割每一行,而不是将文件拆分为单个数据。
string fileContent = File.ReadAllText("C:\\Syscrawl\\new.txt");
var logItems = fileContent.Split(new string[]{"----------------------"}, false);
当您在屏幕上渲染时,这些logItems
中的每一个仍会包含其换行符。我将它们作为单个数据保留,而不是将它们分成几行。