Извлечение хозяев (доменов) из URL-адресов в текстовом файле и сохранение результатов может потребоваться в различных сценариях, например, для анализа данных веб-сайтов или для автоматизации некоторых задач. В этой статье мы рассмотрим, как выполнить эту задачу с помощью Object Pascal в Delphi.
Для начала, давайте представим, что у нас есть текстовый файл с URL-адресами, подобный следующему:
Наша цель - извлечь домены из этих URL-адресов и сохранить их обратно в файл, получив следующий результат:
github.com
www.example.com
subdomain.example.com
Подход с использованием регулярных выражений
Одним из способов решения этой задачи является использование регулярных выражений. В Object Pascal для работы с регулярными выражениями можно использовать модуль TRegEx из пакета Vcl.Regex. Вот пример кода, который извлекает домены из URL-адресов в файле:
program ExtractHostnames;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
Vcl.Regex,
System.IOUtils;
var
FileContent: TArray<string>;
RegEx: TRegEx;
Match: TMatch;
OutputFile: TFileStream;
begin
// Чтение содержимого файла
FileContent := TFile.ReadAllLines('input.txt');
// Инициализация регулярного выражения
RegEx := TRegEx.Create;
RegEx.Compile('^(https?://)?([a-zA-Z0-9.-]+)');
// Создание файла для вывода результатов
OutputFile := TFileStream.Create('output.txt', fmOpenWrite or fmCreate);
// Цикл по строкам файла
for var Line in FileContent do
begin
// Поиск совпадений в строке
Match := RegEx.Match(Line);
// Проверка наличия совпадения
if Match.Success then
begin
// Запись домена в файл
OutputFile.WriteString(Match.Groups[2].Value + #10);
end;
end;
// Закрытие файла и освобождение ресурсов
OutputFile.Free;
RegEx.Free;
// Задержка для отображения результатов в консоли
Readln;
end.
Этот код считывает содержимое файла input.txt, инициализирует регулярное выражение для поиска доменов в URL-адресах, а затем циклом проходит по каждой строке файла. При наличии совпадения в строке, домен извлекается из него и записывается в файл output.txt.
Подход с использованием функции ExtractDomain
Вопрос, поднятый в контексте, предлагает альтернативный подход к решению этой задачи с помощью функции ExtractDomain. Функция принимает URL-адрес в виде строки и возвращает домен, извлеченный из этого URL-адреса. Вот пример реализации такой функции:
function ExtractDomain(URL: string): string;
var
P: Cardinal;
begin
Result := URL;
if AnsiStartsStr(Result, 'http://') then
Delete(Result, 1, 7)
else if AnsiStartsStr(Result, 'https://') then
Delete(Result, 1, 8);
P := Pos('/', Result);
if P > 0 then
SetLength(Result, P - 1);
end;
Эта функция удаляет префикс http:// или https:// из URL-адреса, а затем ищет первый символ /, который указывает на начало пути. Все символы после этого символа удаляются из строки, оставляя только домен.
Для применения этой функции к нашим URL-адресам в файле, мы можем использовать следующий код:
program ExtractHostnames;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.IOUtils;
function ExtractDomain(URL: string): string;
var
P: Cardinal;
begin
Result := URL;
if AnsiStartsStr(Result, 'http://') then
Delete(Result, 1, 7)
else if AnsiStartsStr(Result, 'https://') then
Delete(Result, 1, 8);
P := Pos('/', Result);
if P > 0 then
SetLength(Result, P - 1);
end;
var
FileContent: TArray<string>;
OutputFile: TFileStream;
begin
// Чтение содержимого файла
FileContent := TFile.ReadAllLines('input.txt');
// Создание файла для вывода результатов
OutputFile := TFileStream.Create('output.txt', fmOpenWrite or fmCreate);
// Цикл по строкам файла
for var Line in FileContent do
begin
// Извлечение домена из строки
var Domain := ExtractDomain(Line);
// Запись домена в файл
OutputFile.WriteString(Domain + #10);
end;
// Закрытие файла и освобождение ресурсов
OutputFile.Free;
// Задержка для отображения результатов в консоли
Readln;
end.
Задача заключается в том, чтобы извлечь домены (хозяев) из URL-адресов в текстовом файле и сохранить результаты в другой файл с использованием Object Pascal в Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.