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

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

rustoss 27-09-2011 14:59 1761062

Поиск слова в txt затем поиск по маске "(383)" и вывод инфы
 
Всем привет!

Помогите написать функцию Поиск слова в txt затем поиск по маске "(383)" и вывод инфы в GUI - Имя - номер телефона

Есть текстовик с именами и номерами телефонов, если ищем имя то не всегда сразу , бывает после какого-то комментария имеется номер

madmasles 27-09-2011 15:01 1761067

rustoss,
Приведите образец текста, в котором искать надо и конкретный результат, который должен быть найден.

rustoss 27-09-2011 15:14 1761085

"Ирина Петровна Васильева - нянечка, Уральская 104 8(383)2-56-54-89 "

В окне ввожу фамилию, кнопка получить, и высвечивается Фамилия и номер телефона

Gui как-то так

Код:

$Gui = GUICreate("Смотрим Номер телефона",  420, 100) 
$Label2 = GUICtrlCreateLabel("Введите имя ", 10, 10, 186, 17)
$Input2 = GUICtrlCreateInput("", 10, 27, 400, 21)
$folder2 = GUICtrlCreateButton("Получить", 340, 55, 70, 23)
$info = GUICtrlCreateLabel ("", 10,60,320,34)


madmasles 27-09-2011 16:29 1761152

rustoss,
Попробуйте так:
Код:

#include <GUIConstantsEx.au3>

$sFile = @ScriptDir & '\TLF.txt'

If Not FileExists($sFile) Then
    MsgBox(16, 'Error', 'No File')
    Exit
EndIf
$sText = FileRead($sFile)
$aFIO = StringRegExp($sText, '([А-Яа-яЁё]+?\h[А-Яа-яЁё]+?\h[А-Яа-яЁё]+?)\h', 3)
If @error Then
    MsgBox(16, 'Error', 'StringRegExp')
    Exit
EndIf
$sFIO = ''
For $i = 0 To UBound($aFIO) - 1
    $sFIO &= $aFIO[$i] & '|'
Next
$aFIO = 0

GUICreate('Смотрим Номер телефона', 420, 100)
GUICtrlCreateLabel('Выберите имя', 10, 10, 186, 17)
$nCombo = GUICtrlCreateCombo('', 10, 27, 400, 21)
GUICtrlSetData(-1, $sFIO)
$nGet = GUICtrlCreateButton('Получить', 340, 55, 70, 23)
$nTLF = GUICtrlCreateLabel('', 10, 60, 320, 34)
GUISetState()
$sFIO = ''
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nCombo, $nGet
            $sSearch = GUICtrlRead($nCombo)
            If $sSearch Then
                $sNum = StringRegExpReplace($sText & @CRLF, '(?s).*?' & $sSearch & '.*?(\d\(\d{3}\).*?\d)\r?\n.*', '\1')
                If @extended = 1 Then
                    GUICtrlSetData($nTLF, $sNum)
                EndIf
            EndIf
    EndSwitch
WEnd


rustoss 27-09-2011 17:00 1761180

Отлично!!!!!

Работает только с русским языком

madmasles 27-09-2011 17:16 1761194

Цитата:

Цитата rustoss
Работает только с русским языком »

Цитата:

Цитата rustoss
"Ирина Петровна Васильева - нянечка, Уральская 104 8(383)2-56-54-89 " »

А где в примере текста другой?

rustoss 27-09-2011 17:39 1761211

нету согласен, просто в контактах есть,


вот сейчас экспериментирую, но темный лес....

это
$aFIO = StringRegExp($sText, '([A-Za-z]+?\h[A-Za-z]+?\h[A-Za-z]+?)\h', 3)
ФИО переписал [A-Za-z] как совместить еще и русский?

тут бы еще понять...
$sNum = StringRegExpReplace($sText & @CRLF, '(?s).*?' & $sSearch & '.*?(\d\(\d{3}\).*?\d)\r?\n.*', '\1')

(\d{3}\) - 3 цифры в скобках?

если переписать все в формат 8(383)2-56-54-89 то находит

есть еще номера 8-800

(383) 2 54-89-72 и по разному записаны

попробую текстовик под один шаблон перебить.

madmasles 27-09-2011 19:11 1761267

Цитата:

Цитата rustoss
просто в контактах есть »

Цитата:

Цитата rustoss
есть еще номера 8-800 »

Я ведь Вас просил образец текста. Дайте все возможные варианты.

rustoss 28-09-2011 10:55 1761634

Jason
jason345@mail.ru
телефон мобильный
8-909-***-**-**

SBRF
http://sbrf.ru
8-800-555-55-50

Василий
дом
(383) 254-56-89

Мария Степанова
(495) 357-54-12

было бы не плохо если есть сайт у контакта то можно переход по клику, либо клик по мылу для письма

madmasles 29-09-2011 14:07 1762421

rustoss,
Попробуйте так:
Код:

#include <GUIConstantsEx.au3>

Opt('TrayMenuMode', 1)

If WinExists(@ScriptName & '{[/@$@\]}') Then Exit
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}')

$sFile = @ScriptDir & '\TLF.txt'
If Not FileExists($sFile) Then
    MsgBox(16, 'Error', 'No File')
    Exit
EndIf
$sText = FileRead($sFile)
$aFIO = StringRegExp($sText, '([А-ЯЁA-Z].*?)\h[^А-ЯЁA-Z]', 3)
If @error Then
    MsgBox(16, 'Error', 'StringRegExp')
    Exit
EndIf
$sFIO = ''
For $i = 0 To UBound($aFIO) - 1
    $sFIO &= $aFIO[$i] & '|'
Next
$aFIO = 0
GUICreate('Смотрим Номер телефона', 420, 110)
GUICtrlCreateLabel('Выберите имя', 10, 10, 186, 17)
$nCombo = GUICtrlCreateCombo('', 10, 27, 400, 21)
GUICtrlSetData(-1, $sFIO)
$nGet = GUICtrlCreateButton('Получить', 340, 55, 70, 23)
$nTLF = GUICtrlCreateLabel('', 10, 60, 320, 20)
$nLink = GUICtrlCreateLabel('', 10, 80, 320, 20)
GUICtrlSetFont(-1, 10, 800, 6, "Arial")
GUICtrlSetColor(-1, 0x0000FF)
GUISetState()
$sFIO = ''
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nCombo, $nGet
            $sSearch = GUICtrlRead($nCombo)
            If $sSearch Then
                $sTLF = StringRegExpReplace($sText & @CRLF, '(?s).*?' & $sSearch & '.*?[а-яёa-z]?\h+(\(?\d.*?)\r?\n.*', '\1')
                If @extended = 1 Then

                    GUICtrlSetData($nTLF, StringStripWS($sTLF, 8))
                EndIf
            EndIf
            If StringRegExp($sText, $sSearch & '.*?http://.*?\r?\n') Then
                $sLink = StringRegExpReplace($sText, '(?s).*?' & $sSearch & '.*?(http://.*?)\h.*', '$1')
                If @extended = 1 Then
                    GUICtrlSetData($nLink, $sLink)
                    GUICtrlSetCursor($nLink, 0)
                EndIf
            Else
                GUICtrlSetData($nLink, '')
                GUICtrlSetCursor($nLink, -1)
            EndIf
            $sLink = ''
            $sTLF = ''
            $sSearch = ''
        Case $nLink
            $sLink = GUICtrlRead($nLink)
            If $sLink Then
                ShellExecute($sLink)
            EndIf
            $sLink = ''
    EndSwitch
WEnd

Проверял с файлом типа:
Код:

Jason jason345@mail.ru телефон мобильный 8-909-111-11-11
SBRF http://sbrf.ru  8-800-555-55-50
Василий дом (383) 254-56-89
Мария Степанова 8(495) 357-54-12


rustoss 29-09-2011 15:27 1762482

Отлично, СПАСИБО! текстовый файл подредактил в строчку все, все работает.


Время: 23:36.

Время: 23:36.
© OSzone.net 2001-