Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 98

Раздел: Delphi » Прочее
/ вопрос решён /

Я запускаю Ping в окне Memo1.
Получается такое(дополнение1);
Как можно с етого текста достать только IP?
Использовал следущий код (дополнение2);
А возможно как-то зделать все это(из названия www сайта IP) без memo?

Приложение:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. ----------------------------------------------------------------------------------------
  25.  
  26.  
  27.  
  28. procedure RunDosInMemo(CmdLine: string; AMemo: TMemo);
  29. const
  30. ReadBuffer = 2400;
  31. var
  32. Security: TSecurityAttributes;
  33. ReadPipe, WritePipe: THandle;
  34. start: TStartUpInfo;
  35. ProcessInfo: TProcessInformation;
  36. Buffer: Pchar;
  37. BytesRead: DWord;
  38. Apprunning: DWord;
  39. begin
  40. Screen.Cursor := CrHourGlass;
  41. Form1.Button1.Enabled := False;
  42. with Security do
  43. begin
  44. nlength := SizeOf(TSecurityAttributes);
  45. binherithandle := true;
  46. lpsecuritydescriptor := nil;
  47. end;
  48. if Createpipe(ReadPipe, WritePipe,
  49. @Security, 0) then
  50. begin
  51. Buffer := AllocMem(ReadBuffer + 1);
  52. FillChar(Start, Sizeof(Start), #0);
  53. start.cb := SizeOf(start);
  54. start.hStdOutput := WritePipe;
  55. start.hStdInput := ReadPipe;
  56. start.dwFlags := STARTF_USESTDHANDLES +
  57. STARTF_USESHOWWINDOW;
  58. start.wShowWindow := SW_HIDE;
  59.  
  60. if CreateProcess(nil,
  61. PChar(CmdLine),
  62. @Security,
  63. @Security,
  64. true,
  65. NORMAL_PRIORITY_CLASS,
  66. nil,
  67. nil,
  68. start,
  69. ProcessInfo) then
  70. begin
  71. repeat
  72. Apprunning := WaitForSingleObject
  73. (ProcessInfo.hProcess, 100);
  74. ReadFile(ReadPipe, Buffer[0],
  75. ReadBuffer, BytesRead, nil);
  76. Buffer[BytesRead] := #0;
  77. OemToAnsi(Buffer, Buffer);
  78. AMemo.Text := AMemo.text + string(Buffer);
  79.  
  80. Application.ProcessMessages;
  81. until (Apprunning <> WAIT_TIMEOUT);
  82. end;
  83. FreeMem(Buffer);
  84. CloseHandle(ProcessInfo.hProcess);
  85. CloseHandle(ProcessInfo.hThread);
  86. CloseHandle(ReadPipe);
  87. CloseHandle(WritePipe);
  88. end;
  89. Screen.Cursor := CrDefault;
  90. Form1.Button1.Enabled := True;
  91.  
  92.  
  93. RunDosInMemo('ping '+ edit1.text, Memo1);


Наземнов Вячеслав Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Наземнов Вячеслав (статус: Посетитель)
Вопрос отправлен: 11 августа 2006, 23:27
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Виталий Лещенко

Здравствуйте, Наземнов Вячеслав!

Первый встречный вопрос: а как этот текст попадает в memo?
Вероятно он не сам туда попадает...
Это я к тому, что при добавлении можно отследить первую строчку "Обмен пакетами с www.mail.ru [194.67.57.26] по 32 байт:" и из нее "выдрать" ip.
Это легко сделать т.к. он заключен в "[", "]".
Для этого есть функция copy.

Ответ отправил: Виталий Лещенко (статус: 4-ый класс)
Время отправки: 13 августа 2006, 23:03
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: mvp

См. приложение. Но это только под Ваш пример

Приложение:
  1. var
  2. _ : integer;
  3. ip : String;
  4. //----
  5. ip := '';
  6. for _:= 0 to memo1.lines.count - 1 do if pos('[', memo1.lines[_]) > 0 then
  7. begin
  8. ip := copy(memo1.lines[_], pos('[', memo1.lines[_]) + 1, pos(']', memo1.lines[_]) - pos('[', memo1.lines[_]) - 1);
  9. break
  10. end;
  11.  


Ответ отправил: mvp (статус: 4-ый класс)
Время отправки: 14 августа 2006, 02:07
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Наземнов Вячеслав!
Если стоит конкретная задача вычлинить необходимые данные из текста можно воспользоваться механизмом Regular Expressions, т.е. Регулярными выражениями.
Возьмите, например, реализацию от Андрея Сорокина (http://regexpstudio.com/RU/).
Приемущество будет в том, что запрос можно изменить во время выполнения.

Приложение:
  1.  
  2. d{1,3}.d{1,3}.d{1,3}.d{1,3}


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 14 августа 2006, 12:05


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.