Показать полную графическую версию : [решено] Поиск числа в .txt
Не флужу
05-07-2009, 18:52
Помогите настроить поиск. Не знаю, как задать число в стринге+ чтоб заносился в масив.
Ищу в .txt стринг, в котором должнобыть число(1-2500), с обеих сторон обхваченное текстом.
Пример:
$aString = String("число [Не могу задать] помогите")
$sRead = FileRead($file)
$array = StringRegExp($sRead, $aString, 1)
При смене количества знаков не меняется ничего ("число 53 помогите") ("число 153 помогите") ("число 1153 помогите")
Ээээ... Практически ничего не понятно мне из этого. Возможно, догадался я в чём смысл, а возможно и не догадался:
$ExpToSearch = "число\s(\d*)\sпомогите"
$SearchIn = FileRead("File.txt")
$array = StringRegExp($SearchIn, $ExpToSearch, 3)
For $i = 0 To Ubound($array) - 1
MsgBox(4096, "Number Is", $array[$i])
Next
вариант:
#include <Array.au3>
Local $sFilePath = @ScriptDir & '\test.txt'
Local $sFileText = @CRLF & FileRead($sFilePath) & @CRLF
;~ $sFileText = StringRegExpReplace ($sFile2Text, "(?:\r\n|[\r\n])", @CRLF); нормализация, может и не нужна
Local $aPattern = String("(?s)(?U).+\n([^\r\n]+\d+[^\r\n]+)\r.+")
Local $aResult = StringRegExp($sFileText, $aPattern, 3)
_ArrayDisplay($aResult)
Не флужу
05-07-2009, 20:02
Sylver Dragon,
Понял ты меня правильно, только вот диапазон ещё 1-2500 хочу задать?
З.Ы. Приношу извинения, хотел как можно понятнее поставить вопрос
proxy,
Спасибо. Думаю именно это мне и нужно. Выручил
Не флужу
06-07-2009, 00:12
Не много поспешил с выводами. Проблема осталась не решена.
Ищу стринг с конкретным текстом, диапазоном цифр и занесением цифр в массив.
Пример:
Текст
Жираф весит 1725 киллограм
Первый слон весит 2730 киллограм
Второй слон весит 2350 киллограм
Не получается задать поиск числа в заданном диапазоне, чтобы только оно заносилось в массив:
String("слон весит [1-2500] киллограм") , а в массив "2350"
Помогите пожалуйста.
#include <Array.au3>
Local $sFilePath = @ScriptDir & '\test.txt'
Local $sFileText = @CRLF & FileRead($sFilePath) & @CRLF
;~ $sFileText = StringRegExpReplace ($sFile2Text, "(?:\r\n|[\r\n])", @CRLF); нормализация, может и не нужна
Local $aPattern = String("(?s)(?U).+\n[^\r\n]+(\d)+[^\r\n]+\r.+")
Local $aResult = StringRegExp($sFileText, $aPattern, 3)
_ArrayDisplay($aResult, 'Результат всех цифр')
Local $i, $aResultLimit[1]
Local $iLimit = 2500
$aResultLimit[0] = 0
For $i=0 To UBound($aResult)-1
If $aResult[$i] <= $iLimit Then
$aResultLimit[0] += 1
ReDim $aResultLimit[$aResultLimit[0]+1]
$aResultLimit[$aResultLimit[0]] = $aResult[$i]
EndIf
Next
_ArrayDisplay($aResultLimit, 'Результат с ограничением')
;~ $aResultLimit[0] - колличество найденных результатов, если нет, то 0
Не флужу
06-07-2009, 01:17
proxy,
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить
P.S. Проблема решена
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить »
пожалуйста, наслаждайся ;)
P.S. Проблема решена »
=>
Настройки темы > "Решено" ? »
Centrinar
23-07-2010, 15:37
решено
madmasles
23-07-2010, 17:16
Не флужу,
Можно еще так попробовать:#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
$sString = 'Жираф весит 1725 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Первый слон весит 2730 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Второй слон весит 2350 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Третий слон весит 2150 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Четвертый слон весит 2850 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Пятый слон весит 2250 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Мешок весит 50 кг,' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Я вешу 100 кг, Собака весит 20 кг.'
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aResult[1]
$j = 0
$iMin = 1000
$iMax = 2500
$aTemp = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sString, "(\d{1,4})", 3)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aTemp) - 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)($aTemp[$i]) >= $iMin And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)($aTemp[$i]) <= $iMax Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$j += 1
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aResult[UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aResult) + 1]
$aResult[$j] = $aTemp[$i]
$aResult[0] = UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aResult) - 1
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
_ArrayDisplay (http://dundats.mvps.org/help/html/libfunctions/_arraydisplay.htm)($aResult, 'Совпадающие числа')
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.