Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-100167
Jao
2003-03-12 09:28
2003.03.31
Преобразование формата дат через SQL


4-100521
Nick_N_A
2003-01-29 05:22
2003.03.31
Standart windows controls


7-100497
RLucky
2002-12-20 14:15
2003.03.31
Двухсторонняя печать


3-100173
Minva74
2003-03-12 21:15
2003.03.31
Добавление файла в запись БД


8-100349
lelikrav
2002-12-09 16:31
2003.03.31
RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский