Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение email адресов из Outlook .dbx файлов 
:(
    Опции темы
Poseidon
Дата 19.5.2005, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: нет
Всего: 133



Код
unit ExtractEmailsFunc; 

interface 

uses 
  Windows, SysUtils; 

procedure CheckEMail(FilePath: string); 

implementation 

var 
  BufferSize: Integer; 

function VerifyFile(strFileName: string): Integer; 
var 
  intErro: Integer; 
  tsrFile: TSearchRec; 
begin 
  intErro := FindFirst(strFileName, FaAnyFile, tsrFile); 
  if intErro = 0 then Result := tsrFile.Size  
  else  
    Result := -1; 
  FindClose(tsrFile); 
end; 

procedure CheckEMail(FilePath: string); 
var 
  I: Integer; 
  hFile: Integer; 
  Buffer: PChar; 
  StrEmail: string; 
begin 
  hFile := FileOpen(FilePath, fmOpenRead); 
  try 
    if hFile = 0 then Exit; 
    GetMem(Buffer, bufferSize + 1); 
    ZeroMemory(Buffer, BufferSize + 1); 
    try 
      FileRead(hFile, Buffer^, BufferSize); 
      I := 0; 
      while I <= BufferSize - 1 do  
      begin 
        StrEmail := ''; 
        if Buffer[I] = '<' then  
        begin 
          Inc(I); 
          while (Buffer[I] <> '@') and (I <= BufferSize) do  
          begin 
            if (Buffer[I] = CHR(45)) or (Buffer[I] = CHR(46)) or 
              (Buffer[I] = CHR(90)) or ((Buffer[I] > CHR(49)) and (Buffer[I] <= CHR(57))) 
              or ((Buffer[I] >= CHR(65)) and (Buffer[I] <= CHR(90))) or 
              ((Buffer[I] >= CHR(97)) and (Buffer[I] <= CHR(122))) then  
            begin 
              StrEmail := StrEmail + Buffer[I]; 
            end  
            else  
            begin 
              StrEmail := ''; 
              Break; 
            end; 
            Inc(I); 
          end; 
          if StrEmail <> '' then  
          begin 
            StrEmail := StrEmail + '@'; 
            Inc(I); 
            while (Buffer[I] <> '.') and (I <= BufferSize) do  
            begin 
              if (Buffer[I] = CHR(45)) or (Buffer[I] = CHR(46)) or 
                (Buffer[I] = CHR(90)) or ((Buffer[I] >= CHR(49)) and (Buffer[I] <= CHR(57))) 
                or ((Buffer[I] >= CHR(65)) and (Buffer[I] <= CHR(90))) or 
                ((Buffer[I] >= CHR(97)) and (Buffer[I] <= CHR(122))) then  
              begin 
                StrEmail := StrEmail + Buffer[I]; 
              end  
              else  
              begin 
                StrEmail := ''; 
                Break; 
              end; 
              Inc(I); 
            end; 
            if StrEmail <> '' then  
            begin 
              StrEmail := StrEmail + '.'; 
              Inc(i); 
              while (Buffer[I] <> '>') and (I <= BufferSize) do  
              begin 
                if (Buffer[I] = CHR(45)) or (Buffer[I] = CHR(46)) or 
                  (Buffer[I] = CHR(90)) or ((Buffer[I] >= CHR(49)) and (Buffer[I] <= CHR(57))) 
                  or ((Buffer[I] >= CHR(65)) and (Buffer[I] <= CHR(90))) or 
                  ((Buffer[I] >= CHR(97)) and (Buffer[I] <= CHR(122))) then  
                begin 
                  StrEmail := StrEmail + Buffer[I]; 
                end  
                else  
                begin 
                  StrEmail := ''; 
                  Break; 
                end; 
                Inc(I); 
              end; 
              if StrEmail <> '' then  
              begin 
                WriteLn(StrEmail); 
                Inc(I); 
              end; 
            end; 
          end; 
        end  
        else  
          Inc(I); 
      end; 
    finally 
      FreeMem(Buffer); 
    end; 
  finally 
    FileClose(hFile); 
  end; 
end; 

begin 
  BufferSize := VerifyFile(ParamStr(1)); 
  if BufferSize <= 0 then Exit; 
  CheckEMail(ParamStr(1)); 
end. 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.