【问题标题】:Read Line after specific line在特定行之后读取行
【发布时间】:2016-11-30 20:19:29
【问题描述】:

我正在尝试这样做,以便我可以读取“检查”之后存在的所有行,我尝试使用 StreamReader 或 cli,而无法移动到下一行,同一行是总是阅读。

下面是一个提取的.txt文件示例,文件中有很多注册表项。

TXT文件

Windows Registry Editor Version 5.00


//BEFORE MORE key

[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1]
"BarID"=dword:00008033
"Visible"=dword:00000000
"XPos"=dword:fffffffe
"YPos"=dword:fffffffe
"Docking"=dword:00000001
"MRUDockID"=dword:00000000
"MRUDockLeftPos"=dword:00000000
"MRUDockTopPos"=dword:00000000
"MRUDockRightPos"=dword:0000070c
"MRUDockBottomPos"=dword:000000f5
"MRUFloatStyle"=dword:00002004
"MRUFloatXPos"=dword:80000000
"MRUFloatYPos"=dword:00000000

//MORE KEY AFTER

代码

private void btnReplace_Click(object sender, EventArgs e)
{
     string check = "[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1]";

     foreach (string line in File.ReadLines(_path))
     {
         if(line == check)
         {
            //need here read all line after "check"

         }
    }
}

【问题讨论】:

  • 一方面,您需要转义字符串文字中的反斜杠,或者将字符串标记为原始字符串。

标签: c# streamreader


【解决方案1】:

您可以使用布尔值来跟踪您是否在正确的位置:

这里我假设一个空行表示该部分的结尾。

bool readingTargetSection = false;
foreach (string line in File.ReadLines(_path))  
{
    if (readingTargetSection)
    {
        if (line.Trim() == "") {
            // or just break out of the loop
            readingTargetSection = false;
        }
        else {
            // read the line
        }
    }       
    else if (line == check)
    {
        readingTargetSection = true;
    }
}

【讨论】:

  • 感谢支持,问题是现在他把"check"后面的所有行都读完了,会不会出现crash,只是找到一个空行,我试着插入:if ((readingTargetSection) && (line != "\"")) 但不起作用
  • 当然,readingTargetSection 必须在每一行 not check 之后重置。喜欢readingTargetSection = (line == check)
  • 你确实说过//需要在这里阅读问题中“检查”之后的所有行。如果您想在空白行停止阅读,请参阅我的编辑。
【解决方案2】:

这里可以使用LINQ。

private void btnReplace_Click(object sender, EventArgs e)
{
    // The '@' marks the string as a verbatim string.
    string check = @"[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1]";

    var linesAfterCheck = File.ReadLines(_path)
    .SkipWhile(l => l != check) // Skip until check
    .Skip(1); // Skip line containing check

    foreach (string line in linesAfterCheck)  
    {
        // Code
    }
}

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 2014-04-19
    • 2021-12-22
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多