Как захватить текст заметки для редактирования Delphi

Я хотел бы записать IP-адрес динамического шлюза, указанный в памятке, в текстовое поле. Как я могу сделать это с помощью подстановочных знаков или захватить всю строку шлюза, начинающуюся с «Шлюз: 10.127.*.*», и получить IP-адрес шлюза в текстовое поле.

Вот пример уже захваченного текста заметки:

Description: Microsoft Hosted Network Virtual Adapter
HW Address Length: 6
HWAddress: E0:2A:82:F9:B2:3E
Index: 32
Type: 71
CurrentIPAddress: 
IP Addresses:    192.168.48.1/255.255.255.0
Gateway:    0.0.0.0/255.255.255.255
Name: {22712B8F-5E3A-48D4-8C0D-771708BF0305}
Description: HUAWEI Mobile Connect - Network Card
HW Address Length: 6
HWAddress: 0C:5B:8F:27:9A:64
Index: 4
Type: 243
CurrentIPAddress: 
IP Addresses:    10.127.144.193/255.255.255.252
Gateway:    10.127.144.194/255.255.255.255

РЕДАКТИРОВАТЬ: (из комментария)

I:= Pos('Gateway: 10.127.', Memo1.Text);
if I > 0 then begin
   L := SendMessage(Memo1.Handle, EM_LINEFROMCHAR,   (intTostr(1));
   edit1.Text:=(intTostr(L)); 

person Jk Robbin    schedule 23.08.2016    source источник
comment
Какая версия Делфи? Последние версии поддерживают регулярные выражения, которые могут здесь помочь; в более ранних версиях нет.   -  person Ken White    schedule 23.08.2016
comment
Какую часть этого вы находите сложной? Почему вы используете элемент управления GUI для обработки текста? Как выглядит ваш код? Вы надеетесь, что мы напишем ваш код для вас?   -  person David Heffernan    schedule 23.08.2016
comment
у меня есть пример кода, но я получаю только номер строки   -  person Jk Robbin    schedule 23.08.2016
comment
Кажется, после : есть 3 пробела. И с какой стати ты используешь EM_LINEFROMCHAR? Это безумно. Вы занимаетесь обработкой текста. Нет места для элементов управления графическим интерфейсом. Вы знаете, как отлаживать свой код? Если нет, то все остальное бессмысленно. Прекратите то, что вы делаете, и научитесь отлаживать.   -  person David Heffernan    schedule 23.08.2016


Ответы (2)


Это версия ответа Рене для Delphi 7:

var
  ii: integer
begin
  for ii := 0 to memo.lines.count -1 do begin
    if pos('Gateway:   10.127.', memo.lines[ii]) > 0 then begin
      textbox.caption := memo.lines[ii];
      break; 
    end;
  end;
end;
person Michael Vincent    schedule 23.08.2016
comment
большое спасибо @Micheal Vicent, он хорошо работает, его захват Как мне удалить Gateway: слово и остаться только с результатом в 10.127. - person Jk Robbin; 23.08.2016
comment
@JkRobbin Как вы думаете, как это будет сделано? Вы действительно оставили всякую надежду решить эту проблему самостоятельно? Это простая обработка текста. Не задавайте новые вопросы в комментариях. Почему бы не найти учебник, учебник или даже документацию. Наверняка вы не первый человек, который хочет извлечь подстроку? Вы уверены, что не можете решить это сами? Я знаю, что это звучит резко, но вы просто недостаточно стараетесь, и этот сайт не предназначен для обучения новичков выполнению основных задач. Посетите справочный центр. Мы здесь, чтобы создать ресурс постов с вопросами и ответами, которые будут полезны будущим посетителям. - person David Heffernan; 23.08.2016
comment
только для полноты: вы не можете доверять пробелам или знакам в созданном и захваченном тексте! Вот, не 100%, но лучше :if pos('GATEWAY:10.127.', UpperCase(StringReplace(Memo1.lines[ii],' ','',[rfReplaceAll]))) > 0 then - person moskito-x; 23.08.2016
comment
@moskito - приятное дополнение. С уважением, - person Michael Vincent; 24.08.2016

Самый простой способ добиться этого — перебрать строки заметки и проверить, начинается ли она с «Шлюз: 10.127.».

Например:

for LString in memo.Lines do
  if AnsiStartsText('Gateway:    10.127.', LString) then
    textbox.Caption := LString

Вы также можете использовать регулярные выражения для более конкретной обработки.

person René Hoffmann    schedule 23.08.2016
comment
В Delphi 7 нет ни цикла for .. in, ни регулярных выражений, которые, как предполагалось, могут помочь. Вам нужно будет использовать цикл for с индексом, что-то вроде: for I := 0 to memo.lines.count -1 do - person Michael Vincent; 23.08.2016