Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

Работа с файлом!   Найти похожие ветки 

 
drAcul   (2003-03-20 08:53) [0]

Здравствуйте! Дело вот в чем: есть txt документ с большим текстом внутри которого есть е-майлы хочу выдернуть все е-майл с етого текста вот код:
система такова нахожу значок @ потома идуц назад до первого пробела и вперед до пробела и копирую етот промежуток, что является е-мейлом и вставляю его в другой файл ...
главное раньше работала а щас не хочет ...
Пишет типа access violation и адрес.

var
infile,onfile:textfile;
s,q,str:string;
i,c,w,mm,f,ch:integer;
begin
ch:=0;
c:=0;
w:=0;
f:=0;
AssignFile(onfile,"c:/vars.txt");
Reset(onfile);
AssignFile(infile,"c:/1.txt");
Rewrite(infile);

while not eof(onfile) do
begin
readln(onfile,s);
for i:=1 to length(s) do
begin
if s[i]="@" then
begin
c:=i;
break;
end;
end;

for i:=c to length(s) do
begin
if s[i]=" " then почему то в именно здесь глючит??
begin
f:=i;
break;
end;
end;

for i:=1 to c do
begin
mm:=c-i;
if s[mm]=" " then
begin
w:=mm;
break;
end;
end;
str:=copy(s,w+1,f-w-1);
writeln(infile,str);
end;
Прошу хелпа .. скорее всего шибка то простая но догнать не могу


 
MBo ©   (2003-03-20 09:07) [1]

после чтения каждой строки используй pos, далее проверяй на 0


 
ЮЮ ©   (2003-03-20 09:19) [2]

for i:= c to length(s) do
begin
if s[i]=" " then почему то в именно здесь глючит??
begin
f:=i;
break;
end;
end;

Потому что с определена только в том случае, когда нашли "@", а когда больше нет, то указывает на "индекс последней находки совсем в другой строке", а если не нашли вообще, то равно 0


 
Bel ©   (2003-03-20 09:36) [3]

Вообще здесь много багов. Кроме указанного ЮЮ © (20.03.03 09:19) (нет проверки на то, есть ли вообще в текущей строке символ "@"), не учтено, что адрес может оканчиваться (и начинаться) не только пробелом, но и запятой, например, или точкой, или концом строки, наконец. Т.е. возможны строки:
Его адрес aaa@bbb.ru, который.....
aaa@bbb.ru

И ещё. Вместо первого цикла есть функция Pos. А в третьем цикле лучше использовать for i:=c downto 1 do.


 
Crazy Joker ©   (2003-03-20 09:49) [4]

Используй регулярные выражения.


 
Wital   (2003-03-20 10:26) [5]

Посмотри на http://anso.da.ru/ или http://anso.virtualave.net/.
Скачай библиотеку для работы регулярными выражениями. Там кстати есть пример поиска е-майл"ов в тексте.


 
Alexandr B.   (2003-03-20 12:58) [6]

нюсь вам это нужно не для спама

var i,j,last_space, last_d:integer;
s:string;
begin
for j := 0 to memo1.lines.count-1 do
begin
last_space:= -1;
last_d:integer := -1;
for i:= 1 to length(s) do
begin
if (s[i] = " ") or (i = length(s)) then
begin
if last_d > last_space then
showmessage(copy(s,last_space,i-last_space));
last_space := i;
end;
if s[i] = "@" then last_d := i;
end;
end;
end;


ps. набирал наживую так что может не сработать



Страницы: 1 вся ветка

Текущий архив: 2003.03.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
6-100364
IronWit
2003-02-06 15:21
2003.03.31
IdUDPServer вопрос


3-100183
gmkushkunov
2003-03-11 21:40
2003.03.31
Delphi 7 и SQL Server 2000


14-100433
NetKnight
2003-03-14 11:54
2003.03.31
КИНТЕ ДОКУМЕНТАЦИЮ ПО РАБОТЕ С SysTray.


3-100174
stone
2003-03-13 10:58
2003.03.31
TADOCommand.States


14-100464
Карлсон
2003-03-14 19:50
2003.03.31
любовь и физиология.