Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 14:26   #1
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
Стрелка Ексель и регулярные выражания

Приветствую всех!надо реализовать следующее:
есть текстовик с записями типа
<B>Иманова ул.,<D> 2-комн. кв., 11/12, 59 кв. м, улучш. план., кирп. дом, 2 бал. заст., с/у разд., нов. дом, без рем., уг.Брусиловского, $58000, продаю. Т.62-62-11, Т.8-701-1515686
<B>5 мкр.,<D>1-комн. кв., 9/9, 51/12 кв. м, улучш. план., пан. дом, с/у разд., лодж. заст., комн. изол., неуглов., $60000, торг, продаю. Т.39-73-92
....
и т.д.
надо сделать отчет в екселе по средним ценам квартир отдельно по 1-комнатным, 2-хкомнатным и т.д.,посоветуйте чем лучше это реализовать? средствами дельфи и регулярных выражений? откуда начать копать?
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 23.11.2009, 14:49   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

При данной структуре текста ,я думаю,лучше Сплит применять
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.11.2009, 15:10   #3
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Лучше приложить пример файла.
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 23.11.2009, 15:36   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Делал как-то раз макрос, который обрабатывает объявления (в формате файлов HTM) типа таких:

Цитата:
15 М/Р-Н ул., 2-ком. кв-ру, 9/9 эт. пан., 50/30/8 кв.м, 90-й серии, треб. космет. ремонт, 1,7 млн.руб.
т. 8-960-188-9725

2-, 3-КОМ. КВ-РЫ и 1-ком. кв-ры, а также 2-уровневые кв-ры на мансардном эт., в р-не рынка 9-го м/р-на, в 4-эт., одноподъездном, 16-квартирном шикарном доме из облицовочного кирпича. Приглашаем ценящих качество и комфорт. Недорого.
т. 8-910-653-8726

50 ЛЕТ НЛМК ул., 2-ком. кв-ру 14-й эт., 72 кв.м, возм. обмен.
т. 8-910-333-0821
На выходе получался Excel-файл подобного типа:




Использовал такой код (функция Split во всех возможных комбинациях):
Код:
Function parseString(ByVal txt As String)
    On Error Resume Next
    Dim ra(1 To 1, 1 To 20) As String
    arr0 = Split(txt, Chr(13)): телефоны = arr0(1)
    txt = arr0(0)    ' строка без телефонов

    Улица = GetStringPart(txt, "", "ул.", 0, 1)
    If InStr(1, Улица, " ") = 0 Then Улица = StrConv(Улица, vbProperCase)

    КолвоКомнат = GetStringPart(txt, "", "-ком", 0, 2, True)

    ИнфоОбЭтажах = Split(GetStringPart(txt, "", "эт.", 0, 1, True), "/")
    Этаж = Val(ИнфоОбЭтажах(0)): Этажность = ИнфоОбЭтажах(1)

    ИнфоОПлощади = Split(GetStringPart(txt, "", "кв.м", 0, 2, True), "/")
    МетражОбщий = ИнфоОПлощади(0): МетражКомнат = ИнфоОПлощади(1): МетражКухни = ИнфоОПлощади(2)

    txt = Replace(txt, " млн", "млн")
    Цена = GetStringPart(txt, "", "руб.", 0, 0, True): Цена = FormatPrice(Цена)

    ra(1, 1) = Улица: ra(1, 2) = КолвоКомнат
    ra(1, 3) = Этаж: ra(1, 4) = Этажность
    ra(1, 5) = МетражОбщий: ra(1, 6) = МетражКомнат: ra(1, 7) = МетражКухни
    ra(1, 8) = Цена: ra(1, 9) = телефоны

    parseString = ra
End Function

Function GetStringPart(ByRef txt As String, ByVal strST As String, ByVal strEND As String, _
                       Optional ByVal CropST As Integer = 0, Optional ByVal CropEND As Integer = 0, _
                       Optional ByVal LastWord As Boolean = False) As String

    On Error Resume Next
    pos1 = InStr(1, txt, strST): pos2 = InStr(1, txt, strEND)
    part = Mid(txt, pos1, pos2 - pos1): GetStringPart = Trim(part)
    DeletedText = Mid(txt, pos1, pos2 - pos1 + Len(strEND) + CropEND)
    txt = Trim(Replace(txt, DeletedText, ""))
    If LastWord Then
        arr000 = Split(GetStringPart, " ")
        GetStringPart = arr000(UBound(arr000))
    End If
End Function
EducatedFool вне форума Ответить с цитированием
Старый 24.11.2009, 11:51   #5
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
Радость

EducatedFool, спасибо большое! буду юзать при помощи макроса
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка в ексель CradleOfSong Microsoft Office Excel 10 11.10.2009 22:10
Делфи + ексель AnnNet Общие вопросы Delphi 1 21.02.2009 00:10
Функции в Ексель Юра_ Microsoft Office Excel 5 16.12.2008 14:26
не могу открыть ексель Kakha Microsoft Office Excel 2 05.02.2008 22:33
Нужно найти последнюю строку в файле с информацией и узнать ее адрес Мефистофель Microsoft Office Excel 2 10.06.2007 16:03