Быстро обрезать ссылки до доменов Memo
Как в Memo1 обрезать ссылки до доменов удалив все https и http.
https://site1.ru/threads/fdfddd2/
http://site2.ru/threads/fdfddd23434/
https://site3.ru/threads/fdfddd434/
Что бы на выходе получилось
site1.ru
site2.ru
site3.ru
Обрезаю вот так но это очень долго если ссылок 1000 - 3000 ссылок!
// В начале удаляю все до //
for i:= 0 to Memo1.Lines.Count - 1 do
Memo1.Lines[i]:= Copy(Memo1.Lines[i], Pos('/', Memo1.Lines[i]) + 2, MaxInt);
// А после удаляю все после
for i:= 0 to Memo1.Lines.Count - 1 do
Memo1.Lines[i]:= Copy(Memo1.Lines[i], 1, Pos('/', Memo1.Lines[i])-1);
Ответы (1 шт):
Автор решения: Kromster
→ Ссылка
Как обычно уже, не работайте с текстом в VCL компонентах напрямую, это каждый раз вызывает кучу пересчетов. Заберите текст из Мемо, обработайте, положите обратно.
Если нужно именно http обрезать, то как минимум вот так будет в разы быстрее:
s := Memo1.Lines.Text;
s := StringReplace(s, 'https:', '', [rfReplaceAll]);
s := StringReplace(s, 'http:', '', [rfReplaceAll]);
Memo1.Lines.Text := s;
Для удаления всего после / уже придется работать построчно.
Вот такой вариант работает почти мгновенно на 4000 строках. Посмотрите что тут делается:
procedure TForm1.Memo1Click(Sender: TObject);
var
i: Integer;
s: string;
begin
// Достаем текст и делаем авто-замену
s := Memo1.Lines.Text;
s := StringReplace(s, 'https://', '', [rfReplaceAll]);
s := StringReplace(s, 'http://', '', [rfReplaceAll]);
Memo1.Lines.Text := s;
// Читаем из списка и складываем в новый список (строку с переносами)
s := '';
for i := 0 to Memo1.Lines.Count - 1 do
s := s + Copy(Memo1.Lines[i], 1, Pos('/', Memo1.Lines[i]) - 1) + sLineBreak;
Memo1.Lines.Text := s;
end;
Ну и конечно же, по-хорошему, подготовку (обрезку) данных надо делать ДО помещения в интерфейс.