Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2012-11-28 11:28:51 ЛС | профиль | цитата
Добрый день
Есть почтовые сообщения которые хранятся на сервере в виде *.msg
Вот пример одного из них
code_29622.txt
Их надо распарсить и из строки которая указывает "Кому" (То: ) необходимо вытащить все почтовые адреса.
Когда в поле "То:" указан один получатель у меня получается вытащить почтовый адрес, а если в поле "То:" указано несколько получателей (Как в моем примере),
то получается вытащить тот почтовый адрес, который стоит первый.
Вот пример моих действий
code_29624.txt

Подскажите что я не учел, что надо доработать?
------------ Дoбавленo в 11.28:
Вот как додумал сам
Add(MainForm,3757232,119,154)
{
Width=518
Height=382
Position=1
link(onCreate,9502157:doLoad,[(173,174)(173,188)])
}
Add(Button,11450067,112,217)
{
Top=150
Caption="Поехали"
link(onClick,4504541:doSearch,[])
}
Add(Edit,4726583,196,84)
{
Top=110
Width=345
Text="msg\1.msg"
}
Add(Label,1361219,7,7)
{
Top=95
Width=85
Height=17
Caption="Искать в файле"
}
Add(Memo,7827633,252,217)
{
Top=185
Width=500
Height=70
}
Add(BlockFind,4504541,196,217)
{
IncludeBlock=1
StartBlock="To: "
EndBlock="Subject: "
link(onSearch,7827633:doAdd,[])
link(onEndSearch,10283401:doEnum,[(241,230)(241,286)])
link(Text,9502157:Text,[])
}
Add(StrList,9502157,196,154)
{
link(FileName,4726583:Text,[(209,135)(202,135)])
}
Add(MultiBlockFind,12591657,329,280)
{
TagList="{**c -- Комментарий -- c**}
{**s} < {**x} > {**e}"
link(onResult1,9383331:doAdd,[])
}
Add(Memo,9383331,399,280)
{
Top=265
Width=500
}
Add(ArrayEnum,10283401,266,280)
{
link(onItem,12591657:doMultiBlockFind,[])
link(Array,7827633:Array,[])
}

Но мне кажется что эта схема... как бы это сказать... - топорно сделана
Буду рад если кто то меня поправит и предложит элегантное решение
карма: 1

0
файлы: 2code_29622.txt [4.5KB] [397], code_29624.txt [1KB] [280]
Ответов: 1536
Рейтинг: 176
#2: 2012-11-28 11:36:45 ЛС | профиль | цитата
-= DriveR =-,
Add(MainForm,3757232,245,224)
{
Width=354
Height=382
Position=1
}
Add(Button,11450067,245,280)
{
Top=150
Caption="Поехали"
link(onClick,4504541:doSearch,[])
}
Add(Memo,7827633,476,280)
{
Top=185
Width=340
Height=150
}
Add(BlockFind,4504541,308,280)
{
IncludeBlock=1
StartBlock="To: "
EndBlock="Subject: "
link(onSearch,14584559:doExec,[])
link(Text,9502157:Text,[])
}
Add(StrList,9502157,308,217)
{
Strings=#26:Return-Path: <kyi@mail.ru>|39:Received: from mail.ru ([192.168.0.13])|66:by mx.server.err (Courier Mail Server 1.57) with ESMTP id 02N00006|56:for <sms@mx.server.err>; Tue, 27 Nov 2012 17:35:29 +0400|76:Received: from SmtpServer.Submit by s-exchange with Microsoft SMTP Server id|44: 14.1.355.2; Tue, 27 Nov 2012 13:35:27 +0000|63:Received: from S-EXCHANGE.mail.ru ([::1]) by s-exchange.mail.ru|69: ([::1]) with mapi id 14.01.0355.002; Tue, 27 Nov 2012 17:35:22 +0400|61:From: =?koi8-r?B?687R2sXXIODSycog6cfP0sXXyd4=?= <kyi@mail.ru>|73:To: =?koi8-r?B?68HS0NXIyc4g4c7Uz84g4NLYxdfJ3g==?= <karpukhin_ay@mail.ru>,|70:=?koi8-r?B?4tXCzs/XIOTNydTSycog98zBxMnNydLP18ne?= <bubnov_dv@mail.ru>,|68:=?koi8-r?B?7snLydTJziDl18fFzsnKIOHOxNLFxdfJ3g==?= <enikitin@mail.ru>|29:Subject: test-sms-nea-bdv-kay|34:Thread-Topic: test-sms-nea-bdv-kay|46:Thread-Index: Ac3MpArMKHbYU0wVSrGTv+phUMaKEg==|70:Disposition-Notification-To: =?koi8-r?B?687R2sXXIODSycog6cfP0sXXyd4=?=|13:<kyi@mail.ru>|32:Return-Receipt-To: <kyi@mail.ru>|37:Date: Tue, 27 Nov 2012 13:35:21 +0000|73:Message-ID: <791C72CF0A63844888ECADD02E9F967D0E565794@s-exchange.mail.ru>|29:Accept-Language: ru-RU, en-US|23:Content-Language: ru-RU|16:X-MS-Has-Attach:|21:X-MS-TNEF-Correlator:|32:x-originating-ip: [192.168.4.51]|67:x-zgate: {9cc28116-3049-46d2-8e00-b342edc608c2};27.11.2012 13:35:21|36:Content-Type: multipart/alternative;|70:boundary="_000_791C72CF0A63844888ECADD02E9F967D0E565794sexchangemail_"|17:MIME-Version: 1.0|0:|64:--_000_791C72CF0A63844888ECADD02E9F967D0E565794sexchangemail.ru_|42:Content-Type: text/plain; charset="koi8-r"|43:Content-Transfer-Encoding: quoted-printable|0:|20:test-sms-nea-bdv-kay|0:|0:|10:----------|2:73|0:|0:|0:|64:--_000_791C72CF0A63844888ECADD02E9F967D0E565794sexchangemail.ru_|41:Content-Type: text/html; charset="koi8-r"|43:Content-Transfer-Encoding: quoted-printable|0:|76:<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=|76:osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =|76:xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=|28://www.w3.org/TR/REC-html40">|6:<head>|74:<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dkoi8-r">|73:<meta name=3D"Generator" content=3D"Microsoft Word 14 (filtered medium)">|11:<style><!--|22:/* Font Definitions */|10:@font-face|21:{font-family:Calibri;|31:panose-1:2 15 5 2 2 2 4 3 2 4;}|23:/* Style Definitions */|40:p.MsoNormal, li.MsoNormal, div.MsoNormal|12:{margin:0mm;|22:margin-bottom:.0001pt;|17:font-size:11.0pt;|35:font-family:"Calibri","sans-serif";|28:mso-fareast-language:EN-US;}|25:a:link, span.MsoHyperlink|23:{mso-style-priority:99;|11:color:blue;|27:text-decoration:underline;}|36:a:visited, span.MsoHyperlinkFollowed|23:{mso-style-priority:99;|13:color:purple;|27:text-decoration:underline;}|17:span.EmailStyle17|33:{mso-style-type:personal-compose;|35:font-family:"Calibri","sans-serif";|18:color:windowtext;}|15:..MsoChpDefault|28:{mso-style-type:export-only;|35:font-family:"Calibri","sans-serif";|28:mso-fareast-language:EN-US;}|18:@page WordSection1|22:{size:612.0pt 792.0pt;|36:margin:20.0mm 42.5pt 20.0mm 30.0mm;}|16:div.WordSection1|20:{page:WordSection1;}|35:--></style><!--[if gte mso 9]><xml>|51:<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />|42:</xml><![endif]--><!--[if gte mso 9]><xml>|30:<o:shapelayout v:ext=3D"edit">|37:<o:idmap v:ext=3D"edit" data=3D"1" />|34:</o:shapelayout></xml><![endif]-->|7:</head>|49:<body lang=3D"RU" link=3D"blue" vlink=3D"purple">|28:<div class=3D"WordSection1">|76:<p class=3D"MsoNormal"><span lang=3D"EN-US">test-sms-nea-bdv-kay<o:p></o:p>=|11:</span></p>|72:<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>|76:<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"mso-fareast-language:R=|31:U"><o:p>&nbsp;</o:p></span></p>|76:<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:9.0pt;color:=|65:#4F81BD;mso-fareast-language:RU">----------<o:p></o:p></span></p>|76:<p class=3D"MsoNormal"><span style=3D"font-size:9.0pt;color:#4F81BD">73<o:p=|18:></o:p></span></p>|75:<p class=3D"MsoNormal"><span style=3D"font-size:9.0pt;color:#4F81BD">C =D5=|31:=D7=C1=D6=C5=CE=C9=C5=CD, <o:p>|17:</o:p></span></p>|76:<p class=3D"MsoNormal"><span style=3D"font-size:9.0pt;color:#4F81BD">=E0=D2=|72:=C9=CA =E9=C7=CF=D2=C5=D7=C9=DE =EB=CE=D1=DA=C5=D7<o:p></o:p></span></p>|76:<p class=3D"MsoNormal"><span style=3D"font-size:9.0pt;color:#4F81BD">=E6=E7=|66:=F5=F0 &quot;=E3=EE=E9=E9 =FC=E9=F3=F5&quot;<o:p></o:p></span></p>|76:<p class=3D"MsoNormal"><span style=3D"font-size:9.0pt;color:#4F81BD">(495)5=|76:39-</span><span lang=3D"EN-US" style=3D"font-size:9.0pt;color:#4F81BD">22-4=|76:8</span><span style=3D"font-size:9.0pt;color:#4F81BD"> (1240)<o:p></o:p></s=|8:pan></p>|44:<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>|6:</div>|7:</body>|7:</html>|0:|66:--_000_791C72CF0A63844888ECADD02E9F967D0E565794sexchangemail.ru_--|0:|
}
Add(RE_Search,14584559,371,280)
{
Expression="<.*?>"
link(onMatch,3017327:doEvent1,[])
}
Add(Hub,3017327,413,280)
{
link(onEvent1,7827633:doAdd,[])
link(onEvent2,14584559:doExecNext,[(441,293)(441,323)(359,323)(359,293)])
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

1
Голосовали:-= DriveR =-
Ответов: 817
Рейтинг: 52
#3: 2012-11-28 11:59:01 ЛС | профиль | цитата
ser_davkin,
Очень интересный пример, сейчас буду разбираться
Спасибо
------------ Дoбавленo в 11.59:
Возник пояснительный вопрос по <.*?>
< > - я понимаю, что это символы из текстового файлика, между ними будем искать
. - в справке написано "Один любой символ", это я понял
* - в справке написано "0 или более предшествующего выражения" и дан пример "".*" - 0 или более любых символов, "H*" - 0 или более букв "H""
Вот этого я не могу понять, что означает "более предшествующего выражения" объясните на пальцах, для тех кто в танке

? - в справке написано "0 или 1 предшествующего выражения" и дан пример "Hi!?" - соответствует только Hi! или Hi"
Вот этого я не могу понять, почему ИЛИ? Вроде должно трактоваться однозначно.
карма: 1

0
Ответов: 1536
Рейтинг: 176
#4: 2012-11-28 12:19:00 ЛС | профиль | цитата
-= DriveR =-, признаться, я сам мало чего понимаю. А, пример дал, исходя из собственного опыта. Сам пытаюсь понять, но чаще методом "тыка".
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 1528
Рейтинг: 57
#5: 2012-11-28 12:25:49 ЛС | профиль | цитата
такая регулярка берёт всё что после To: .... до первой ">" без запятой в конце
т.е. ей не нужен "Subject:"

(?s)(?<=
To: ).*?>(?!,)

но заставить её работать под delphi врятли получится, используйте шарп
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#6: 2012-11-28 12:47:33 ЛС | профиль | цитата
А так вроде нельзя
code_29625.txt
~30% экономии и по размеру кодов и по времени парсинга.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_29625.txt [4.5KB] [296]
Ответов: 1528
Рейтинг: 57
#7: 2012-11-28 13:21:16 ЛС | профиль | цитата
Tad писал(а):
А так вроде нельзя

слишком просто
карма: 0

0
Ответов: 817
Рейтинг: 52
#8: 2012-11-28 13:28:02 ЛС | профиль | цитата
Tad,
У вас как обычно - оптимизация на высоте
Спасибо за науку.
hitman249,
Вот этот вариант мне как раз и нужен.
Только что столкнулся с большой проблемой.
У меня была задумка, выцепить блок с началом То: и окончанием Subject: и работать с ним, а не со всем текстом
Однако задумка провалилась, т.к. Subject: не всегда стоит после То:
Поэтому вопрос первого поста остается открытым
-= DriveR =- писал(а):
а если в поле "То:" указано несколько получателей (Как в моем примере),
то получается вытащить тот почтовый адрес, который стоит первый.

Прошу помощи в решении вопроса
Как можно из поля То: вытащить адреса всех получателей?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#9: 2012-11-28 14:24:36 ЛС | профиль | цитата
На без "Subject:"
code_29626.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_29626.txt [4.5KB] [292]
Ответов: 817
Рейтинг: 52
#10: 2012-11-28 15:09:19 ЛС | профиль | цитата
Tad,
В два захода но работает
Спасибо

А я все чего уперся чтобы за один заход сделать
карма: 1

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)