Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
ВнизРабота с файлом! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c