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

{codecitation class="brush: pascal; gutter: false;" width="600px"}{
InternetCrackUrl() takes a URL as a parameter and breaks it down into components,
which are then accessible via the TURLComponents structure.

InternetCrackUrl() zerlegt eine URL in seine Komponenten, welche dann ьber die
TURLComponents Struktur zugдnglich sind.
}

uses
WinInet;

procedure TForm1.Button1Click(Sender: TObject);
var
aURLC: TURLComponents;
const
TEST_URL = ‘http://www.swissdelphicenter.ch/de/tipsindex.php’;
begin
FillChar(aURLC, SizeOf(TURLComponents), 0);
with aURLC do
begin
lpszScheme := nil;
dwSchemeLength := INTERNET_MAX_SCHEME_LENGTH;
lpszHostName := nil;
dwHostNameLength := INTERNET_MAX_HOST_NAME_LENGTH;
lpszUserName := nil;
dwUserNameLength := INTERNET_MAX_USER_NAME_LENGTH;
lpszPassword := nil;
dwPasswordLength := INTERNET_MAX_PASSWORD_LENGTH;
lpszUrlPath := nil;
dwUrlPathLength := INTERNET_MAX_PATH_LENGTH;
lpszExtraInfo := nil;
dwExtraInfoLength := INTERNET_MAX_PATH_LENGTH;
dwStructSize := SizeOf(aURLC);
end;
if InternetCrackUrl(PChar(TEST_URL), Length(TEST_URL), 0, aURLC) then
begin
ShowMessage(aURLC.lpszUrlPath);
end;
end;
{/codecitation}

Команды Telnet

создание файлового архива tar, cpio
архивация файла compress, pack
замер времени исполнения команды time, timex
запуск программы в указанное время at
вывод файла на экран cat, page, dtpad, textedit. xedit
постраничный вывод файла на экран more
вывод на экран первых десяти строк файла head
вывод на экран последних десяти строк файла tail
вывод содержимого заархивированного файла peat
выполнение вычислений be, dc
вывод даты и времени date
изменение даты модификации файла на текущую touch
деархивация файла unpack, uncompress
декодирование UU-кода uudecode
вывод объема свободного дискового пространства df
вывод объема дискового пространства,
занятого данным каталогом du
завершение работы exit
печать заголовка banner
захват изображения на экране xv, xwd
печать изображений xdpr, xpr
вывод имени системы uname
запуск интерпретатора командной строки sh, csh, ksh
запуск интерпретатора командной строки на удаленной системе rsh
личный календарь cm, dtcm
вывод календаря cal, cm, dtcm
калькулятор calctool, dtcalc, xcalc
создание каталога mkdir, filemgr dtfile
вывод размера каталога du
вывод списка файлов и подкаталогов данного каталога Is
смена текущего каталога cd
удаление каталога rmdir, filemgr, dtfile
вывод имени текущего каталога pwd
сравнение содержимого двух каталогов dircmp
UU-кодирование файла для пересылки его по электронной почте uuencode
выполнение команды в указанное время at
ввод команды при работе с графическим интерфейсом xterm, dtterm, shelltool
компиляция С-программ, копирование файлов cat, cp, filemgr, dtfile
копирование файлов на удаленную систему и с удаленной системы гср
копирование файлов между UNIX-системами uucp
вычисление контрольной суммы файла sum
нумерация строк текстового файла n1
объединение нескольких файлов в один cat
объединение отсортированных файлов по общему полю join
объединение файлов в качестве двух столбцов paste
вывод или установка значений переменных окружения env
ожидание завершения процесса wait
отправка сообщения другому пользователю write
очистка экрана clear
вывод состояния службы печати Ipstat
запуск службы печати Ipsched
останов службы печати Ipshut
печать заголовка banner
персональный календарь calendar, cm, dtcm
подсчет количества слов в текстовом файле we
выполнение повторяющихся задач crontab
поиск текстовых строк egrep, grep, fgrep
поиск и замена символов tr
поиск в файле awk, nawk
поиск файлов find
вывод списка пользователей listusers
вывод информации о других пользователях системы who
поиск информации о других пользователях системы finger
выполнение последовательности команд batch
запуск команды с пониженным приоритетом nice
проверка правописания spell
прерывание процесса kill
вывод списка процессов PS
присоединение содержимого файлов к существующему файлу cat
разбиение файла на части csplit, split
редактирование текстового файла vi, ed, dtpad, textedit,
xedit
резервирование информации tar, cpio
поиск и замена символов tr
вывод списка известных систем uuname
вывод системного идентификатора пользователя id
вывод системных сообщений news
подсчет числа слов в файле we
вывод состояния службы UUCP uustat
создание нового текстового файла cat, dtpad, textedit,
xedit
установка соединения с удаленным
терминалом ct
установка соединения с удаленной
UNIX-системой cu
разрешение/запрет вывода сообщений на
терминал mesg
вывод сообщений news
сортировка файла sort
сортировка и обработка файла awk, nawk
вывод состояния машин в сети ruptime
вывод списка файлов в каталоге Is
сравнение содержимого двух каталогов dircmp
сравнение содержимого двух отсортированных файлов comm
сравнение трех файлов diff3
сравнение двух файлов и вывод отличающихся строк diff, bdiff
сравнение двух файлов cmp
сравнение двух файлов и вывод
отличающихся и совпадающих строк sdiff
создание ссылок In
печать на стандартный вывод echo
запись стандартного вывода в файл tee
вывод столбца из отсортированного файла cut
поиск текстовых строк в бинарном файле strings
поиск текстовых строк egrep, grep, fgrep
табличный процессор tbi
настройка табуляции tabs
смена текущего каталога cd
вывод имени текущего каталога pwd
открытие окна терминала xterm,
dtterm,
shelltool
вывод информации о терминале tput
настройка конфигурации терминала stty
вывод параметров терминала tty
определение типа файла file
удаление из очереди заданий, созданных
командой at atrm
удаление заданий из очереди печати cancel
удаление каталога rmdir,
filemgr,
dtfile
удаление файла rm, filemgr,
dtfile
удаление форматирующих символов
из файла col
копирование файлов с удаленной системы rep, uucp,
ftp
выполнение команды на удаленной системе uux
запуск интерпретатора командной строки на
удаленной системе rsh
вход в удаленную систему telnet,
riogin
вывод информации о соединениях с
удаленными системами uulog
создание нового текстового файла cat, dtpad,
textedit,
xedit
изменение даты модификации файла на
текущую touch
вывод полного имени файла basename
вывод файла на экран cat, page, dtpad, textedit, xedit
постраничный вывод файла на экран more
вывод на экран первых десяти строк файла head
вывод на экран последних десяти строк файла tail
вывод списка файлов в каталоге Is
копирование файла cat, cp, filemgr, dtfile
определение типа файла file
поиск файла find
разбиение файла split
редактирование файла vi, ed, dtpad. textedit, xedit
удаление файла rm
шифрование файла crypt
печать формул eqn, neqn
отображение шрифта xfd, xfontsel
вывод списка доступных шрифтов xlsfonts, fslsfonts
отправка и чтение электронной почты mailx, dtmail, mailtool
уведомление о получении новых писем по электронной почте notify, xbiff

Synapse delphi

Вступление

Часто, чтобы раскритиковать программистов на Delphi, используют простой и дешёвый трюк. Мол, мы, истинные программисты пишем весь код ручками, а вы, делфисты, набросали компонентов и всё.

На самом деле весь код ручками пишут только фанатики и те, кому нечего делать. А нормальные программисты используют готовые библиотеки. Компоненты Delphi на самом деле тоже являются самыми настоящими библиотеками, просто написаны с учётом некоторых особенностей Delphi.

Но доказывать это им бессмысленно – всё равно будут сопротивляться (чтобы они согласились?). Мы пойдём другим путём – будем использовать самую что не наесть библиотеку — и пусть медитируют себе.

В качестве примера я представляю библиотеку Synapse (http://synapse.ararat.cz/doku.php). По возможностям эта библиотека соответствует популярным Indy, только стабильность у неё получше. К примеру, почту с вложениями отправлять/принимать или файлы по https качать на ней проще простого. А вот с Indy нужно хорошо помучаться.

И главный плюс этой библиотеки – полностью бесплатна с удобной BSD лицензией — можно использовать в своих приложениях — как бесплатных, так и в коммерческих, без каких-то отчислений. Но автор абсолютно не против, если вы подкинете ему пару копеек.

Установка библиотеки

Для начала нужно скачать библиотеку с сайта. Или просто взять в прилагаемом к статье архиве. Теперь распакуем куда-нибудь во временный каталог. Создадим папку, где будет располагаться сама библиотека – у меня это обычно каталог C:\Program Files\CodeGear\Components\Synapse. То есть, я, не стесняясь, создаю каталог в каталоге Delphi, и ставлю туда свои библиотеки/компоненты. Хотя некоторые сочтут это идеологически неверным – можно создать каталог для библиотек и в любом другом месте, главное, чтобы его потом не удалили. Второе условие – чтобы путь содержал только латинские символы. Иначе бывают проблемы с некоторыми компонентами. Один из посетителей сайта www.delphi.int.ru делает оригинально — он хранит всё это прямо на рабочем столе. А потом ругается, мол, ничего не работает.

Скопируем в новосозданную папку содержимое папки source\lib из распакованного архива.

Остался последний шаг – объяснить Delphi, что у нас есть новая библиотека. Для этого просто нужно прописать каталоги для поиска.

В случае с Delphi 2006-2007 это делается так:

  • File -> Close All. При надобности сохраните текущий проект (это страховочное действие, не помешает).
  • Tools -> Options. В появившемся диалоге в дереве слева находим Environment options -> Delphi Options -> Library – Win32.
  • Ищем поле Browsing path. Жмём кнопку […] справа от него.
  • В появившемся окне ищем снова кнопку […] и, нажав её, выбираем каталог, куда сохранили содержимое библиотеки и жмём ОК.
  • Теперь Add и ОК для закрытия окна.
  • Повторяем предыдущие три действия, только для поля Library Path.

Если же у вас Delphi 7 или младше, то нужно в меню Tools найти пункт Environment Options, а потом вкладку Library. Всё остальное — очень похоже.

Сделай это по-простому

Так, библиотека установлена, пора написать что-то простенькое. Например, научимся скачивать страничку из интернета и отображать в Memo. Создаём новый проект, Ставим на форму Memo, растянем нормально и включим полосы прокрутки установкой свойства ScrollBars = ssBoth. Ставим на форму кнопку, кликая дважды по ней, создаём обработчик. Но перед написанием обработчика, надо добавить один юнит в список uses, а именно – httpsend.

А теперь сам обработчик. Приготовились увидеть сверхсложный код? Вот он – одна строчка:

HttpGetText(http://вашсайт.нет', Memo1.Lines)

Не правда ли просто? Но на самом деле, лучше написать немного сложнее:

if not HttpGetText('http://вашсайт.нет', Memo1.Lines) then ShowMessage('Не получилось скачать:(');

Этот код нужен только для контроля ошибок, но это часто важно. Интересно, что если страничку не удастся скачать, то никаких ошибок не будет, просто функция возвратит false. Иногда очень удобно, особенно в потоках.

Замечателен и следующий факт. Так как библиотека является лёгкой обёрткой над обычными сокетами, то это сказывается на размере выполняемого файла. Этот же пример, переписанный с использованием Indy весит на 30% больше – а это весомый аргумент (если быть точнее, то в цифрах два исполнимых файла у меня весили 404 и 530 кбайт).