Что нового

[Файловая система] Поиск значения в файлах в папке

Rouzenrot

Новичок
Сообщения
30
Репутация
0
Здравствуйте!
Есть некая папка. В этой папке лежит много файлов с произвольными названиями, но одного расширения. Нужно как-то прогнать поиск по этим файлам, и зафиксировать где было найдено заданное значение.
Я могу получить список файлов в папке через библиотеку FileOperations.au3
Код:
$array = _FO_FileSearch($Inpath,'*.xml')

Получим в результате массив с именами файлов.

Можно найти значение по файлу как-то так
Код:
$search = "наше значение"
$sText = FileRead ($Inpath&"\result.xml") ;читаем файл
$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив

For $i = 1 To $aLines[0] Step +1
   If StringInStr($aLines[$i], $search) Then	;ищем в строчках массива заданное значение, и если находим
   $hFile = FileOpen($outpath&"\res.txt", 128+1)		;то открываем файл с результатом
   FileWrite($hFile, $aLines[$i-1]&$aLines[$i-2] & @CRLF)	;и пишем в него заданные строки
   EndIf
Next


Но никак не могу сообразить, как в FileRead вставить найденные значения имён файлов из массива...
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Rouzenrot [?]
как в FileRead вставить найденные значения имён файлов из массива
зачем это делать?
и что, конкретно нужно?
найти значение во всех файлах и записать в один? или изменить значение в каждом файле?
точно опиши
а в данном коде не хватает закрытия файла. если этого не делать, то при большом количестве открытых файлов произойдет переполнение памяти
 
Автор
R

Rouzenrot

Новичок
Сообщения
30
Репутация
0
joiner сказал(а):
Rouzenrot [?]
как в FileRead вставить найденные значения имён файлов из массива
зачем это делать?
и что, конкретно нужно?
найти значение во всех файлах и записать в один? или изменить значение в каждом файле?
точно опиши
а в данном коде не хватает закрытия файла. если этого не делать, то при большом количестве открытых файлов произойдет переполнение памяти

Есть папка, в нее формируются выписки. Они в опредёленом формате, разбиты на строки. Там куча разной инфы, в том числе, допустим, строка с получателем. Нужно поискать значение получателя во всех файлах в папке, и записать в виде результата определенную строку из тех файлов, в которых оно было найдено. Про закрытие в курсе, просто в примере не указал :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Rouzenrot

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Код:
For $i = 1 To $array[0]
	$sText = FileRead($array[$i]) ;читаем файл
	$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив
	For $f = 1 To $aLines[0]
		If StringInStr($aLines[$f], $search) Then ;ищем в строчках массива заданное значение, и если находим
			$hFile = FileOpen($outpath & "\res.txt", 128 + 1) ;то открываем файл с результатом
			FileWrite($hFile, $aLines[$f - 1] & $aLines[$f - 2] & @CRLF) ;и пишем в него заданные строки
			FileClose($hFile)
		EndIf
	Next
Next
 
Автор
R

Rouzenrot

Новичок
Сообщения
30
Репутация
0
Работает, спасибо!
Где-то около такого решения я и бродил, только никак не мог сформулировать. Пытался одну переменную в обоих счетчиках использовать :smile:
 
Верх