题
我有一个程序可以处理文本日志文件并对文本文件进行标记。
对文本文件进行标记后,程序应该能够跳过新输出的前 5 行,其中包含
“RipXP v.20081001
2010 年 12 月 3 日星期五 12:50:21 推出
J:\syscrawl\注册表\配置\系统
USB存储器
ControlSet001\Enum\USBStor"
有人可以就代码提供建议吗?
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
namespace Testing
{
class Program
{
static void Main(string[] args)
{
TextReader tr = new StreamReader(@"C:\Test\new.txt");
String SplitBy = "----------------------------------------";
String fullLog = tr.ReadToEnd();
String[] sections = fullLog.Split(new string[] { SplitBy }, StringSplitOptions.None);
foreach (String r in sections)
{
Console.WriteLine(r);
Console.WriteLine("============================================================");
}
}
}
}
输出示例:
“RipXP v.20081001 发射时间: Fri Dec 3 12:50:21 2010 Z
J:\syscrawl egistry\config\system USBStor 接口 ControlSet001\枚举\USBStor
CdRom&Ven_SanDisk&Prod_Ultra_Backup&Rev_8.32 [Wed Dec 1 07:39:09 2010 信噪比:2584820A2890B317&1 [2010 年 12 月 1 日星期三 07:39:22] 友情名称 :SanDisk Ultra 备份 USB 设备
CdRom&Ven_WD&Prod_Virtual_CD_070A&Rev_1032 [Wed Dec 1 07:31:33 2010] 信噪比:575836314331304639303339&1 [2010年12月3日,星期五,05:41:48] 友情名称 :WD 虚拟 CD 070A USB 设备
磁盘&Ven_SanDisk&Prod_Ultra_Backup&Rev_8.32 [Wed Dec 1 07:39:09 2010] 信噪比:2584820A2890B317&0 [2010 年 12 月 1 日星期三 07:39:19] 友情名称 :闪迪至尊高速备份 USB 设备 ParentIdPrefix:8&2f23e350&0
磁盘&Ven_WD&Prod_My_Passport_070A&Rev_1032 [Wed Dec 1 07:31:33 2010] 信噪比:575836314331304639303339&0 [2010年12月3日,星期五,05:41:48] 友情名称 :WD My Passport 070A USB 设备
其他&Ven_WD&Prod_SES_Device&Rev_1032 [Wed Dec 1 07:31:33 2010] 信噪比:575836314331304639303339&2 [2010 年 12 月 3 日星期五 05:41:48]
============================================================
还原点信息 描述:系统检查点 类型:系统检查点 创建时间 :2010 年 11 月 29 日星期一 16:51:52
J:\syscrawl estore P1\snapshot_REGISTRY_MACHINE_SYSTEM
未找到 ControlSet001\Enum\USBStor。
============================================================"
解决方案 2
答案是流读取器,它应该在使用 split 方法之前开始读取各个行位置。代码: C# 如何使用 Stream Reader 读取文本文件时跳过行数?
其他提示
哦,我想你想连接原始字符串
String.Replace 是这里最好的解决方案
string data = tr.ReadToEnd();
data.Replace(Environment.NewLine, " ")
.Replace("----------------------------------------", "============================================================");
Console.WriteLine(data);
再次编辑
抱歉,我真的不明白这个问题。但要跳过前 5 行
string lines = tr.ReadToEnd().Split('\n');
StringBuilder sb = new StringBuilder();
for(int i = 5; i < lines.Length; i++) sb.AppendLine(lines[i]);
string sixthLineToEnd = sb.ToString();
希望有帮助