2016-05-24 1 views
-1

Я пытаюсь сделать свою программу отображаемой над текстом текста, которая соответствует шаблону, который я установил.Поиск текстового файла для текста, над которым шаблон совпадает с вводом

Например, если пользовательского ввода «FastModeIdleImmediateCount" = DWORD: 00000000' , я должен получить ближайший HKEY выше, который [HKEY_CURRENT_CONFIG \ System \ CurrentControlSet \ Enum \ SCSI \ Disk & Ven_ATA & Prod_TOSHIBA_MQ01ABD0 \ 4 & 6a0976b 000000] для этого случая.

[HKEY_CURRENT_CONFIG\System\CurrentControlSet\Enum\SCSI\Disk&Ven_ATA&Prod_TOSHIBA_MQ01ABD0\4&6a0976b&0&000000] 
"StandardModeIdleImmediateCount"=dword:00000000 
"FastModeIdleImmediateCount"=dword:00000000 

[HKEY_CURRENT_CONFIG\System\CurrentControlSet\SERVICES] 

[HKEY_CURRENT_CONFIG\System\CurrentControlSet\SERVICES\TSDDD] 

[HKEY_CURRENT_CONFIG\System\CurrentControlSet\SERVICES\TSDDD\DEVICE0] 
"Attach.ToDesktop"=dword:00000001 

может кто-нибудь, пожалуйста, покажите мне, как я могу закодировать что-то подобное? Я пытался играть с регулярными выражениями, чтобы соответствовать текст с кронштейном, но я не знаю, как это сделать только для поиска текста над моим вводом.

+0

Просьба предоставить более подробную информацию ... что такое источник текста? Выполняется ли поиск в реестре Windows? Вы хотите совместить клавиши или значения? – ElmoDev001

ответ

1

Я предполагаю, что ваш файл является TXT-файлом, хотя, скорее всего, это не так. Но логика такая же. Это не сложно, простой цикл for() сделает трюк. код с необходимым описанием:

string[] lines = File.ReadAllLines(@"d:\test.txt");//replace your directory. We're getting all lines from a text file. 

     string inputToSearchFor = "\"FastModeIdleImmediateCount\"=dword:00000000"; //that's the string to search for 

     int indexOfMatchingLine = Array.FindIndex(lines, line => line == inputToSearchFor); //getting the index of the line, which equals the matchcode 

     string nearestHotKey = String.Empty; 
     for(int i = indexOfMatchingLine; i >=0; i--) //looping for lines above the matched one to find the hotkey 
     {    
      if(lines[i].IndexOf("[HKEY_") == 0)   //if we find a line which begins with "[HKEY_" (that means it's a hotkey, right?) 
      { 
       nearestHotKey = lines[i];    //we get the line into our hotkey string 
       break;         //breaking the loop 
      } 
     } 

     if(nearestHotKey != String.Empty)    //we have actually found a hotkey, so our string is not empty 
     { 
      //add code... 
     } 
0

Вы могли бы попытаться разделить текст на строки, найти индекс строки, содержащей текст (будь то точное совпадение или регулярное выражение используется не имеет значения), а затем backsearch для первого ключа. Возможно, поможет обратная сортировка строк.