我正在尝试让我的程序在输入文本上方显示与我设置的模式匹配的文本。
例如,如果用户输入'FastModeIdleImmediateCount'= dword:00000000',我应该得到最近的HKEY,即[HKEY_CURRENT_CONFIG \ System \ CurrentControlSet \ Enum \ SCSI \ Disk& Ven_ATA& Prod_TOSHIBA_MQ01ABD0 \ 4& 6a0976b& 0& ; 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 :(得分: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...
}
答案 1 :(得分:0)
您可以尝试将文本拆分为行,找到包含文本的行的索引(是否使用完全匹配或正则表达式并不重要),然后对第一个键进行反向搜索。首先对行进行反向排序可能有所帮助。