Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Поиск числа в .txt (http://forum.oszone.net/showthread.php?t=144292)

Не флужу 05-07-2009 18:52 1159541

Поиск числа в .txt
 
Помогите настроить поиск. Не знаю, как задать число в стринге+ чтоб заносился в масив.
Ищу в .txt стринг, в котором должнобыть число(1-2500), с обеих сторон обхваченное текстом.
Пример:

$aString = String("число [Не могу задать] помогите")
$sRead = FileRead($file)
$array = StringRegExp($sRead, $aString, 1)

При смене количества знаков не меняется ничего ("число 53 помогите") ("число 153 помогите") ("число 1153 помогите")

SyDr 05-07-2009 19:37 1159574

Ээээ... Практически ничего не понятно мне из этого. Возможно, догадался я в чём смысл, а возможно и не догадался:
Код:

$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


proxy 05-07-2009 20:00 1159595

вариант:
Код:

#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 1159598

Sylver Dragon,
Понял ты меня правильно, только вот диапазон ещё 1-2500 хочу задать?

З.Ы. Приношу извинения, хотел как можно понятнее поставить вопрос

proxy,
Спасибо. Думаю именно это мне и нужно. Выручил

Не флужу 06-07-2009 00:12 1159746

Не много поспешил с выводами. Проблема осталась не решена.

Ищу стринг с конкретным текстом, диапазоном цифр и занесением цифр в массив.
Пример:
Текст
Жираф весит 1725 киллограм
Первый слон весит 2730 киллограм
Второй слон весит 2350 киллограм

Не получается задать поиск числа в заданном диапазоне, чтобы только оно заносилось в массив:
String("слон весит [1-2500] киллограм") , а в массив "2350"

Помогите пожалуйста.

proxy 06-07-2009 01:06 1159773

Код:

#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 1159777

proxy,
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить

P.S. Проблема решена

proxy 06-07-2009 01:22 1159780

Цитата:

Цитата Не флужу
Спасибо тебе за старания и помощ. Суть кода понял. Буду тестить »

пожалуйста, наслаждайся ;)

Цитата:

Цитата Не флужу
P.S. Проблема решена »

=>
Цитата:

Настройки темы > "Решено" ? »

Centrinar 23-07-2010 15:37 1459227

решено

madmasles 23-07-2010 17:16 1459307

Не флужу,
Можно еще так попробовать:
Код:

#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.

Время: 03:01.
© OSzone.net 2001-