-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Поиск числа в .txt
Помогите настроить поиск. Не знаю, как задать число в стринге+ чтоб заносился в масив.
Ищу в .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)
|
Sylver Dragon,
Понял ты меня правильно, только вот диапазон ещё 1-2500 хочу задать?
З.Ы. Приношу извинения, хотел как можно понятнее поставить вопрос
proxy,
Спасибо. Думаю именно это мне и нужно. Выручил
|
Не много поспешил с выводами. Проблема осталась не решена.
Ищу стринг с конкретным текстом, диапазоном цифр и занесением цифр в массив.
Пример:
Текст
Жираф весит 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
|
proxy,
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить
P.S. Проблема решена
|
Цитата:
Цитата Не флужу
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить »
|
пожалуйста, наслаждайся ;)
=>
Цитата:
Настройки темы > "Решено" ? »
|
|
Не флужу,
Можно еще так попробовать:
Код:
#include <Array.au3>
$sString = 'Жираф весит 1725 кг,' & @CRLF & _
'Первый слон весит 2730 кг,' & @CRLF & _
'Второй слон весит 2350 кг,' & @CRLF & _
'Третий слон весит 2150 кг,' & @CRLF & _
'Четвертый слон весит 2850 кг,' & @CRLF & _
'Пятый слон весит 2250 кг,' & @CRLF & _
'Мешок весит 50 кг,' & @CRLF & _
'Я вешу 100 кг, Собака весит 20 кг.'
Dim $aResult[1]
$j = 0
$iMin = 1000
$iMax = 2500
$aTemp = StringRegExp($sString, "(\d{1,4})", 3)
For $i = 0 To UBound($aTemp) - 1
If Number($aTemp[$i]) >= $iMin And Number($aTemp[$i]) <= $iMax Then
$j += 1
ReDim $aResult[UBound($aResult) + 1]
$aResult[$j] = $aTemp[$i]
$aResult[0] = UBound($aResult) - 1
EndIf
Next
_ArrayDisplay($aResult, 'Совпадающие числа')
|
Время: 03:01.
© OSzone.net 2001-