Вопрос такой... Нужно в заданном каталоге найти в файлах все e-mail адресу, ну в общем name@domain.ru, мои знания кончаются на том, как уже файл найден и открыт на чтение... как поиск организовать? ведь адреса могут быть и типа name@.cor.uk.net.org... и как быстрее высти поиск, потоком считывать, и по строково через readln?
Приветствую Вас, Ландграф Павел! В зависимости от того, какого формата твои файлы алгоритмы могут быть разными. Если известно, что переносов быть не может - то есть не может оказаться так, что часть адреса на одной строке, а чать на другой, тогда все просто: считываешь строку. - readln подойдет и ищешь в ней собачку (@). 0. определяешь множество допустимых символов (a..z, A..Z, 0..9, ., _). 1. i := index_of_@; 2. j := i - 1; 3. while (j > 0 && str[j] in nameSet) do dec(j); //тут ты уже найдешь начало майла. Потом аналогичным способом делаешь поиск домейна. Кроме того, нужно добавить проверку на ошибки и т.д., но это уже мелочи.
Ответ отправлен: 19.12.2002, 14:23 Отправитель: vitya Отвечает Артём Шегеда
Приветствую Вас, Ландграф Павел!
По-моему, нахождение e-mail адресов в строке - задача элементарная: 1. Читаем строку. 2. Находим в ней символ "@" 3. "Отматываем" назад строку до разделителя (не буква, не цифра, не "_", не "-", не "." - только такие символы можно использовать для имени адресата) 4. Сканируем после "@" до разделителя (те же символы)
Здравствуйте, Ландграф Павел! ===== Pro bono publico, no bloody panico! ===== Рассуждая логически: раз уж в адресе нет пробелов, значит нужно шерстить все выражения между пробелами на предмет наличия в них @. Плюс исключения, такие как возможность наличествования после адреса точки, зпт и др. знаков припинания и символов (они, как известно, пишутся слитно с предыдущим текстом). Поиск производится методом Find. На счет того что быстрее: это не принципиально. Еще: лично я бы предпочел работу с TStringList. Ответ отправлен: 19.12.2002, 11:42 Отправитель: Idle Sign Отвечает toshka
Здравствуйте, Ландграф Павел! Попробуй приложение. Идея такая: загружаем файл в память, сканируем буфер пока не найдем символ @, затем от позиции этого символа производим обратное сканировние на разрешенные символы (буквы англиского алфавита, подчеркивание и тире, точки). Аналогичным образом производим сканирование вперед, чтобы получить домен и помещаем все в ListBox
Приложение: Ответ отправлен: 19.12.2002, 11:50 Отправитель: toshka
Вопрос № 368
Доброе время дня или ночи. У меня написан такой код для дезасемблирования файла(см. приложение). В файле встречается комбинация из 3 Hex-цифр адрес код 05 CD 06 3E 07 09 08 С3 СD(205) соответствует ассемблерному оператору CALL, а две последние цифры это адрес перехода, т.е. СALL 093E.С3 - JMP. Так вот определить в ходе дезасемблирования Hex-цифру соответствующую оператору CALL мой код может, но далее необходимо взять вначале 09, а затем 3E. После нужно перейти к следующей команде, т.е. к адресу 08. Также нужно запомнить эту метку перехода и там где этот адрес совпадает c меткой нужно эту метку поставить (пример желательно c Memo). Не могу сделать чтобы по нажатию клавиши 'Дезасемблировать' выдавалось предупреждение если файл еще не открыт.
Добрый день, bogdan! ===== Pro bono publico, no bloody panico! ===== Неужели Ульфак также у кого-то спрашивал... 1) для команды безусловного перехода тебе тоже придется кой-чего накорябать, а то программа не будет знать, что вызов закончен, далее 2) обращайся к следующим байтам (e.g. i+1), обратным порядком в цикле (а можешь сдвинуть) 3) заведи переменную, где хранится метка/ее адрес 4) ну, так ты проверь, есть ли в мемо что-нибудь, и будет тебе предупреждение Ответ отправлен: 22.12.2002, 12:26 Отправитель: Idle Sign Отвечает Vadim
Доброе время суток, bogdan! 1. С помощью операции сдвига: var a, b: word; a:=$09; b:=$3e; a:=(a shl 8) + b; т.е. сдвинуть число $09 влево на 8 позиций и прибавить $3e. 2. А ты не пробовал дизассемблировать файл который уже открыт (например, с помощью AssignFile(f, 'file.ext'); Reset(f);) или диалога открытия файла? Тогда и проверять не надо :)).
Ответ отправлен: 21.12.2002, 12:44 Отправитель: Vadim
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.