Автор Тема: Помогите дописать скрипт (вытаскивание данных из текстового файла)  (Прочитано 2613 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vaf [?]

  • Новичок
  • *
  • Сообщений: 135
  • Репутация: 2
    • Награды
Версия AutoIt: 3.

Описание:
Запарился уже. Нужно вот из такого файла выцепить поотдельности всю информацию, т.е. "Название", улицу, телефон, мыло, сайт.

TitleBoxВасилек, магазин
-------------------------------------------------------------------------------
      пр-кт Победы 27
       42-63-73
       42-04-88
      ул. Рахманинова 38г


Спар, сеть супермаркетов
-------------------------------------------------------------------------------
   www.spar.ru
   [email protected]
      ул. Ладожская 111а
       40-53-33
      пр-кт Строителей 33
       44-37-91
      ул. Карпинского 39
       42-49-10

Примечания:

Я наваял вот такой код, но все дело тормознулось на определении телефона. Не подскажите, как довести до ума мой скриптик ? Буду очень благодарен.

$predpr_f = 0
$who = ", сеть супермаркетов"
$n = 1
$file = FileOpenDialog ("Выберите файл", "C:\", "Text (*.txt)", 1)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

; Read in lines of text until the EOF is reached
While 1
    $line = FileReadLine($file, $n) ; Считываем строки
    If @error = -1 Then ExitLoop

if StringInStr ($line, $who) <> 0 Then ; Если попалась $who
$predpr = StringLeft ($line, StringInStr ($line, $who)-1)
$predpr_f = 1 ; Флаг найденности предприятия
MsgBox (0, $predpr_f, $predpr)
EndIf

if StringInStr ($line, "ул.") <> 0 Then ; Если попалась "ул."
$street = StringMid ($line, StringInStr ($line, "ул.")+4) ; Отрезаем слово "ул."
$sPattern="\s*(\d+?\D?)\s*($|\r\n)"
$sReplace=", \1\2"
$sNewText=StringRegExpReplace($street,$sPattern,$sReplace)
If $predpr_f = 1  Then MsgBox(0, $predpr_f, $sNewText)
EndIf

If StringLen ($line) = 0 Then $predpr_f = 0 ; если попалась строка нулевой длины, значит предприяте закончилось,  флаг найденности обнуляем

$n+=1

Wend



Добавлено: Декабрь 05, 2010, 02:14:37
Собственно говоря проблема решена (написал топорным методом) буду рад если кто нибудь оптимизирует или перепишет код по своему.
$predpr_f = 0
$who = ", автозаправочные станции (АЗС)"
$n = 1
$file = FileOpenDialog ("Выберите файл", "C:\", "Text (*.txt)", 1)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

; Read in lines of text until the EOF is reached
While 1
    $line = FileReadLine($file, $n) ; Считываем строки
    If @error = -1 Then ExitLoop

if StringInStr ($line, $who) <> 0 Then ; Если попалась $who
$predpr = StringLeft ($line, StringInStr ($line, $who)-1)
$predpr_f = 1 ; Флаг найденности предприятия
MsgBox (0, $predpr_f, $predpr)
EndIf

if StringInStr ($line, "ул.") <> 0 Then ; Если попалась "ул."
$street = StringMid ($line, StringInStr ($line, "ул.")+4) ; Отрезаем слово "ул."
$sPattern="\s*(\d+?\D?)\s*($|\r\n)"
$sReplace=", \1\2"
$sNewText=StringRegExpReplace($street,$sPattern,$sReplace)
If $predpr_f = 1  Then MsgBox(0, $predpr_f, $sNewText)
EndIf


if StringInStr ($line, "пр-кт") <> 0 Then ; Если попалась "пр-кт"
$line = StringReplace ($line, "пр-кт", "ул. Проспект ")
$street = StringMid ($line, StringInStr ($line, "ул.")+4) ; Отрезаем слово "ул."
$sPattern="\s*(\d+?\D?)\s*($|\r\n)"
$sReplace=", \1\2"
$sNewText=StringRegExpReplace($street,$sPattern,$sReplace)
If $predpr_f = 1  Then MsgBox(0, $predpr_f, $sNewText)
EndIf

$phone = StringReplace ($line, chr(09), "")
$phone = StringReplace ($phone, " ", "")
If StringIsDigit (StringLeft ($phone, 1)) = 1 Then
If $predpr_f = 1 Then MsgBox (0, StringLen ($phone), $phone)
EndIf

If StringInStr ($line, "www") <> 0 Then ; Если попалась "www."
$www = StringReplace ($line, chr(09), "")
$www = StringReplace ($www, " ", "")
If $predpr_f = 1 Then MsgBox (0, StringLen ($www), $www)
EndIf

If StringInStr ($line, "@") <> 0 Then ; Если попалась "@"
$email = StringReplace ($line, chr(09), "")
$email = StringReplace ($email, " ", "")
If $predpr_f = 1 Then MsgBox (0, StringLen ($email), $email)
EndIf



If StringLen ($line) = 0 Then $predpr_f = 0 ; если попалась строка нулевой длины, значит предприяте закончилось,  флаг найденности обнуляем

$n+=1

Wend
« Последнее редактирование: Декабрь 05, 2010, 02:15:46 от vaf, Причина: Объединение сообщений »

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
4975 Просмотров
Последний ответ Октябрь 11, 2010, 19:11:06
от madmasles
1 Ответов
2926 Просмотров
Последний ответ Февраль 09, 2012, 15:05:12
от Yuriy
6 Ответов
3157 Просмотров
Последний ответ Март 02, 2012, 13:25:14
от Noober
1 Ответов
4965 Просмотров
Последний ответ Август 12, 2016, 04:05:14
от Ciber SLasH
6 Ответов
2866 Просмотров
Последний ответ Июль 06, 2013, 00:10:22
от AZJIO
8 Ответов
3202 Просмотров
Последний ответ Август 21, 2013, 23:51:43
от Arbios
17 Ответов
3748 Просмотров
Последний ответ Июнь 26, 2014, 18:26:10
от cheslav
9 Ответов
3343 Просмотров
Последний ответ Июнь 17, 2015, 15:18:59
от uritalex
14 Ответов
485 Просмотров
Последний ответ Август 02, 2017, 09:14:21
от maes_tro
3 Ответов
288 Просмотров
Последний ответ Октябрь 03, 2017, 19:17:46
от Visors