Что нового

[Данные, строки] Поиск текста в файле и выдача номера строки

sss

Продвинутый
Сообщения
332
Репутация
96
Версия AutoIt: 3

Описание:
Здравствуйте. Извините, если вопрос тупой, я новичок в AutoIt. Столкнулся с проблемой: есть файл. В нем порядка 500-600 строк. Надо найти в файле текст и выдать номер строки где этот текст содержится. Своим умом смог лишь доказать наличие искомого текста в данном файле. Где-то (уже не помню где) увидел алгоритм построчного поиска - у меня почему-то не сработало. Буду очень признателен, если Вы ответите и объясните действие скрипта.


Примечание:
Создаю тему в первый раз. Не судите строго!
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Код:
$sSearched = 'text' ;Текст который ищем

$sText = FileRead('text.txt') ;Читаем файл

$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив

For $i = 1 To $aLines[0] Step +1
	If StringInStr($aLines[$i], $sSearched) Then MsgBox(0, 'Found', 'Line ' & $i & @CRLF & $aLines[$i]) ;В каждой строке ищем текст, если текст найден, выдаём сообщение с номером строки, где нашли
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sss
Можно так попробовать:
Код:
#include <Array.au3>

$sTemp = ''
$sTest = 'вася'
$i = 0
$j = 0
Dim $aTest[1]
$hFile = FileOpen('test.txt', 0)
While 1
	$i += 1
	$sTemp = FileReadLine($hFile, $i)
	If @error = -1 Then ExitLoop
	If StringInStr($sTemp, $sTest) Then
		$j += 1
		ReDim $aTest[$j + 1]
		$aTest[$j] = $i
	EndIf
WEnd
FileClose($hFile)
If Not $j Then
	MsgBox(0, '', 'Нет совпадений.')
Else
	$aTest[0] = 'Найдено совпадений: ' & $j & ' в строках:'
	_ArrayDisplay($aTest, 'Прочитано строк: ' & $i - 1)
EndIf
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Огромное спасибо! Работает! Спасибо за быстрый ответ!
 

Itoku

Новичок
Сообщения
1
Репутация
0
Можно искать кусок текста по регулярному расширению? например
Код:
к[оОаА]рова
(корова, карова, кАрова, кОрова)
 

AZJIO

Меценат
Меценат
Сообщения
2,891
Репутация
1,195
Itoku
Да можно. Вместо StringInStr используй StringRegExp.
 
Верх