Что нового

Поиск определённой строки в файле...

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Люди, извеняюсь за глупый вопрос, :-[ но тема такая...
есть файл "userlevels.txt" и нужно сделать так, чтоб AutoIt нашёл в нём строку "&leveldata=" и выдал определённое обратное значение (1 - есть такая строка, 0 - нет такой строки).

Полазил в справке но нечего не нашёл... :(
Надеюсь на быстрый ответ, заранее спасибо.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
$hOpen = FileOpen("userlevels.txt")
$Returned_value = StringRegExp ( $hOpen , "(?si).*?&leveldata=.*" , 0)
MsgBox(0,"Возвращенное значение",$Returned_value)


Ну как то так. Извини, я не поверял, если есть ошибки, сам исправь, ок? :-[
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Medic84 сказал(а):
Ну как то так. Извини, я не поверял, если есть ошибки, сам исправь, ок? :-[

Попробовал!
Вроде работает! :ok:

:IL_AutoIt_1:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Зачем такие сложности если в наборе AutoIt есть функция?
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Да и ещё.
В том-же Userlevels'e.txt
есть куча строк такого типа
$Zona#Autor#Type#............

Как сделать чтоб AutoIt считал все строки этого типа в массив и отаброзил "Zona"
в GUICtrlCreateList?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Medic84 сказал(а):
Зачем такие сложности если в наборе AutoIt есть функция?
Как видим неизбежно появляется необходимость поиска различных строк.Задача будет и далее усложняться.
Гораздо проще применить унифицированную ф-ию.Насколько я помню она сразу даст массив всех строк с имеющимся текстом
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А можно пример файлика? Т.к. не очень удобно составлять вслепую :-\
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Medic84 [?]
:blink: Даже не проверяя видно насколько это ошибочно. FileOpen возвращает указатель, и что получается у тебя в примере - StringRegExp проверяет указатель? :D
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ну еще можно сказать что FileOpen без указания режима чтения/записи тоже приведет к ошибке
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Вот пример файла: (НИЖЕ)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Так в этом файле нет нужной строки. или так задумано?
Код:
$sPath = @ScriptDir & '\userlevels.txt'; Путь до файла
$hRead = FileOpen($sPath, 0); Открываем файл для чтения
While 1; Цикл для построчного чтения
   $sLine = FileReadLine($hRead); Строка
   If @error = -1 Then ExitLoop; Если конец файла выход из цикла
   If StringInStr($sLine, '&leveldata=') Then MsgBox(0, '', 1); Если найдена фраза в строке, выдать сообщение
   ; Если не выдано ничего, значит строка не найдена
WEnd; Конец цикла
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Так в этом файле нет нужной строки. или так задумано?

Ты меня не понял! Мне нужно чтоб скрипт нашёл :
Код:
$Rocket#Seen#DDA#5000000000000...

$DDA#Seen#DDA#900000000000...

и отобразил "Rocket" и "DDA"(1) в массив, а потом отобразил в GUICtrlCreateList!

но дело в том, что это будет необязательно Rocket и DDA, это может быть другой текст ...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
А что сложного заставить скрипт ищущий фразу &leveldata= искать фразу $Rocket#Seen#DDA#5000000000000... да и вообще, все что угодно? переделай StringInStr() под свои нужды, а с результатом делай что хочешь. Например присвой элементу массива.
Код:
Local $a[2]
$sPath = @ScriptDir & '\userlevels.txt'; Путь до файла
$hRead = FileOpen($sPath, 0); Открываем файл для чтения
While 1; Цикл для построчного чтения
   $sLine = FileReadLine($hRead); Строка
   If @error = -1 Then ExitLoop; Если конец файла выход из цикла
   If StringInStr($sLine, '$Rocket#Seen#DDA#5000000000000') Then 
         $a[0] = 'Rocket'
   ElseIf StringInStr($sLine, '$Rocket#Seen#DDA#5000000000000') Then
         $a[1] = 'DDA'
   EndIf
WEnd; Конец цикла

Ну а дальше, заносишь значения массива в лист
Код:
GUICtrlSetData($hList, $a[0])
GUICtrlSetData($hList, $a[1])

в чем затык? что-то не совсем улавливаю
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
в чем затык? что-то не совсем улавливаю

Ты меня совсем не понял! То что ты пишеш НЕ подходит и НЕ работает!!! :(


Я пробовал через StringRegEx но не вышло! Потомо-что я не умею ей пользоваться правильно!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Seen [?]
Ты меня совсем не понял! То что ты пишеш НЕ подходит и НЕ работает!!!
ну, тогда мой умственный потенциал исчерпан ;D
надеюсь другие участники форума тебе помогут ;)
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Kaster сказал(а):
Seen [?]
Ты меня совсем не понял! То что ты пишеш НЕ подходит и НЕ работает!!!
ну, тогда мой умственный потенциал исчерпан ;D
надеюсь другие участники форума тебе помогут ;)

Всё равно спасибо. Буду ждать других ответов! :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Seen [?]
пробовал через StringRegEx но не вышло
Вот так примерно:

Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Test Script", 300, 200)
$nList = GUICtrlCreateList("", 20, 20, 260, 170)
GUISetState(@SW_SHOW, $hGUI)

_SetListData()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _SetListData()
	Local $sFileRead = FileRead(@ScriptDir & "\userlevels.txt")
	
	Local $aList = StringRegExp($sFileRead, "(?m)^\$(.*?)#", 3)
	Local $iUbound = UBound($aList)-1
	Local $sList_Data = ""
	
	For $i = 0 To $iUbound
		$sList_Data &= $aList[$i]
		If $i < $iUbound Then $sList_Data &= "|"
	Next
	
	GUICtrlSetData($nList, $sList_Data)
EndFunc
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
CreatoR

Вот чего я ожидал! Спасибо CreatoR!



Есть ли где нибудь русское подробное описание StringRegEx ?
 
Верх