Что нового

Поиск ключевых слов в тексте

Сообщения
21
Репутация
-1
Ребзя, встала задача найти на компе все файлы с расширением ini, записать пути до них в текстовик, а потом проверить каждый из на наличие определенного текста.
с первой частью я справился(Записал все в текстовик), да и со второй вроде не должно было быть проблемм, то скрипт тупо зависает и ничего не делает, не пойду в чем проблема.

Код поиска текста в файлах
Код:
#include <file.au3>

$sSearched = 'aim'
$sFilePath = @ScriptDir & "\PUCH.txt"

$sLines = _FileCountLines($sFilePath)
For $i = 0 To $sLines 
    $command = FileReadLine($sFilePath, $i)
	$sText = FileRead($command )
	$aLines = StringSplit($sText, @CRLF, 1)
	
	For $i = 1 To $aLines[0] Step +1
		If StringInStr($aLines[$i], $sSearched) Then 
		MsgBox(0, 'Found',$command)
		EndIf
	Next
Next


Собственно содержимое самого файла
Код:
c:\$GetCurrent\SafeOS\GetCurrentRollback.ini
c:\$Recycle.Bin\S-1-5-21-447417775-3675551546-1990424-1001\desktop.ini
c:\Program Files\desktop.ini
c:\Program Files\HP\HP LaserJet M1210 MFP Series\properties.ini
c:\Program Files\Java\jdk-9.0.1\lib\missioncontrol\jmc.ini
c:\Program Files\Java\jdk-9.0.1\lib\missioncontrol\configuration\config.ini
c:\Program Files\Mozilla Firefox\application.ini
c:\Program Files\Mozilla Firefox\crashreporter.ini
c:\Program Files\Mozilla Firefox\platform.ini
c:\Program Files\Mozilla Firefox\update-settings.ini
c:\Program Files\Mozilla Firefox\updater.ini
c:\Program Files\Mozilla Firefox\browser\crashreporter-override.ini
c:\Program Files\Mozilla Firefox\uninstall\shortcuts_log.ini
c:\Program Files (x86)\desktop.ini
c:\Program Files (x86)\Adobe\Adobe Creative Cloud\ACC\resource\Styles.ini
c:\Program Files (x86)\HideMy.name VPN\conf.ini

И еще, если сможете исправте код, чтобы он искал не одно слово "aim", а список слов который я укажу. Заранее спасибо!
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Скрипт зацикливается так, как Вы постоянно переназначаете переменную $i - внутри одного цикла с переменной вы создаёте ещё один цикл с этой же переменной
Вот так лучше будет :
Код:
#include <file.au3>

$sSearched = 'aim'
$sFilePath = @ScriptDir & "\PUCH.txt"
$sLines = _FileCountLines($sFilePath)
For $i = 0 To $sLines
    $command = FileReadLine($sFilePath, $i)
    $sText = FileRead($command )
    $aLines = StringSplit($sText, @CRLF, 1)
    For $j = 1 To $aLines[0] Step +1
        If StringInStr($aLines[$j], $sSearched) Then
        MsgBox(0, 'Found',$command)
        EndIf
    Next
Next


Не совсем понятно - что Вы делаете этой строкой:" $aLines = StringSplit($sText, @CRLF, 1)", ведь у Вас в переменной "$sText" и так текущая строка.
Возможно так ?
Код:
#include <file.au3>

$sSearched = 'aim'
$sFilePath = @ScriptDir & "\PUCH.txt"
$sText = FileRead($sFilePath)
$aLines = StringSplit($sText, @CRLF, 1)
For $i = 1 To $aLines[0] Step +1
	If StringInStr($aLines[$i], $sSearched) Then
		MsgBox(0, 'Found', $aLines[$i])
	EndIf
Next

Регулярным выражением будет ещё лучше (правда я в них не силён), как-то так:
Код:
#include <file.au3>
#include <array.au3>

$sSearched = 'aim'
$sFilePath = @ScriptDir & "\PUCH.txt"
$sText = FileRead($sFilePath)
$aResult = StringRegExp($sText ,'(.*'&$sSearched&'.*)',3)
_ArrayDisplay($aResult)
 
Верх