2016-11-30 8 views
1

Я пытаюсь сделать так, чтобы я мог читать все строки, которые присутствуют после «проверки», я пытался использовать StreamReader или clicli во время и без, не имея возможности перейти к следующей строке , эта же строка всегда читается.Чтение строки после определенной строки

Ниже приведен пример файла .txt, в файле имеется много ключей реестра.

TXTFile

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" 

     } 
    } 
} 
+1

С одной стороны, вам нужно избежать обратных косых черт в строковом литерале или пометить строку как необработанную. –

ответ

2

Вы можете использовать логическое значение, чтобы отслеживать ли вы в нужном месте:

Здесь я предполагаю, что пустой строка указывает конец раздела.

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; 
    } 
} 
+0

спасибо за поддержку, проблема в том, что теперь он читает все строки после «проверки», произойдет ли это сбой, просто найдите пустую строку, я попытался вставить: if ((readingTargetSection) && (line! = " \ "")) но не работает – koss

+0

Конечно, 'readTargetSection' должен быть сброшен после каждой строки, которая не является' 'проверкой'. Как' readTargetSection = (строка == check) '. – JimmyB

+0

Вы сказали */need here прочитайте всю строку после «check» * в вопросе. Если вы хотите прекратить чтение на пустой строке, см. мое редактирование. – Blorgbeard

1

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 
    } 
}