LINUX.ORG.RU

Delphi(Lazarus), ниасилил Delete

 , ,


0

1

В общем ситуация такая. Никак не могу понять работу этого Delete. В общем имеется такая примерно строка:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 145.249.195.21</body></html>
.
Это StringList. Если же все может работать как с строкой вида variable.Text, то Delete жалуется. Да и с логикой я его конкретно не разобрался.

Поэтому ЛОРовцы, кто пишет в лазарусе/дельфе, вопрос такой: как удалить все, кроме самого айпишника? Да, не осилил. Дельфей давно не пользовался, а тут первый заказ на фрилансе, и надо вспоминать что да как. Но да, не осилил. Поэтому буду признателен за любую помощь.


{$mode objfpc}
uses StrUtils;

function GetIPStr(const s: String): String;
var p, q: Integer;
begin
  Result:='';
  p:=PosSet(['0'..'9'],s);
  if p=0 then Exit;
  q:=PosEx('<',s,p);
  if q=0 then Exit;
  Result:=Copy(s,p,q-p);
end;

const
  s: String = '<html><head><title>Current IP Check</title></head><body>Current IP Address: 145.249.195.21</body></html>';
begin
  WriteLn(GetIPStr(s));
end.
bormant ★★★★★
()
Ответ на: комментарий от ozzee

А что там разбираться, ищем цифру, ищем после неё '<', берём всё, что между.

bormant ★★★★★
()
Ответ на: комментарий от ozzee

Другой вариант, по ': ':

function GetIPStr(const s: String): String;
var p, q: Integer;
begin
  Result:='';
  p:=Pos(': ',s)+2;  if p=2 then Exit;
  q:=PosEx('<',s,p); if q=0 then Exit;
  Result:=Copy(s,p,q-p);
end;

bormant ★★★★★
()
Ответ на: комментарий от bormant

Работает, спасибо большое. Надо будет разобраться в коде, чтобы было понятно что и как работает.

ozzee
() автор топика
Ответ на: комментарий от bormant

Следующее сообщение еще короче? :D

ozzee
() автор топика
Ответ на: комментарий от unlog1c

... и вы считаете, что использование регулярных выражений в данном случае даст...
Хм, а что именно даст-то, чем будет лучше?

bormant ★★★★★
()
Ответ на: комментарий от Dron

Паскаль регистронезависимый, можно как душе угодно, хоть с любыми горбами по вкусу, хоть без.

bormant ★★★★★
()
Ответ на: комментарий от bormant

Ну как минимум - будет один регексп и извлечение совпадений по нему. Кода-то больше-меньше не будет, думаю, зато на тему его работы (за исключением регекспа) можно не задумываться. з.ы. я, кстати, навскидку нихера не помню в дельфях, потому - в твем варианте выход только по <, верно?

alex4321
()
Ответ на: комментарий от unlog1c

Когда я четыре года назад учил школьников лазарусу, там уже были регекспы.

У меня такое ощущение, что они и в какой-то довольно древней дельфи были, в какой уже не помню. Активное программирование на дельфи я закончил 7 лет назад, хотя иногда приходится сдувать пыль с легаси.

hobbit ★★★★★
()
Ответ на: комментарий от alex4321

в твем варианте выход только по <, верно?

В первом и втором — да, между ": " и первым за ним «<», в третьем просто оставляем только цифры и точки.

bormant ★★★★★
()
Ответ на: комментарий от bormant

Хм, а что именно даст-то, чем будет лучше?

Даст хотя бы слабую гарантию, что программа не сломается, если формат входных данных поменяется, и код получится весьма лаконичным.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.