Что нового

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

vaf

Новичок
Сообщения
189
Репутация
2
Версия AutoIt: 3.

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

[box title=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
[/box]

Примечания:

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

Код:
$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



Добавлено:
Сообщение автоматически объединено:

Собственно говоря проблема решена (написал топорным методом) буду рад если кто нибудь оптимизирует или перепишет код по своему.
Код:
$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
 
Верх