|
Вопрос # 98/ вопрос решён / |
|
Я запускаю Ping в окне Memo1.
Получается такое(дополнение1);
Как можно с етого текста достать только IP?
Использовал следущий код (дополнение2);
А возможно как-то зделать все это(из названия www сайта IP) без memo?
Приложение: Переключить в обычный режим-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ----------------------------------------------------------------------------------------
-
-
-
- procedure RunDosInMemo(CmdLine: string; AMemo: TMemo);
- const
- ReadBuffer = 2400;
- var
- Security: TSecurityAttributes;
- ReadPipe, WritePipe: THandle;
- start: TStartUpInfo;
- ProcessInfo: TProcessInformation;
- Buffer: Pchar;
- BytesRead: DWord;
- Apprunning: DWord;
- begin
- Screen.Cursor := CrHourGlass;
- Form1.Button1.Enabled := False;
- with Security do
- begin
- nlength := SizeOf(TSecurityAttributes);
- binherithandle := true;
- lpsecuritydescriptor := nil;
- end;
- if Createpipe(ReadPipe, WritePipe,
- @Security, 0) then
- begin
- Buffer := AllocMem(ReadBuffer + 1);
- FillChar(Start, Sizeof(Start), #0);
- start.cb := SizeOf(start);
- start.hStdOutput := WritePipe;
- start.hStdInput := ReadPipe;
- start.dwFlags := STARTF_USESTDHANDLES +
- STARTF_USESHOWWINDOW;
- start.wShowWindow := SW_HIDE;
-
- if CreateProcess(nil,
- PChar(CmdLine),
- @Security,
- @Security,
- true,
- NORMAL_PRIORITY_CLASS,
- nil,
- nil,
- start,
- ProcessInfo) then
- begin
- repeat
- Apprunning := WaitForSingleObject
- (ProcessInfo.hProcess, 100);
- ReadFile(ReadPipe, Buffer[0],
- ReadBuffer, BytesRead, nil);
- Buffer[BytesRead] := #0;
- OemToAnsi(Buffer, Buffer);
- AMemo.Text := AMemo.text + string(Buffer);
-
- Application.ProcessMessages;
- until (Apprunning <> WAIT_TIMEOUT);
- end;
- FreeMem(Buffer);
- CloseHandle(ProcessInfo.hProcess);
- CloseHandle(ProcessInfo.hThread);
- CloseHandle(ReadPipe);
- CloseHandle(WritePipe);
- end;
- Screen.Cursor := CrDefault;
- Form1.Button1.Enabled := True;
-
-
- 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
См. приложение. Но это только под Ваш пример
Приложение: Переключить в обычный режим- var
- _ : integer;
- ip : String;
- //----
- ip := '';
- for _:= 0 to memo1.lines.count - 1 do if pos('[', memo1.lines[_]) > 0 then
- begin
- ip := copy(memo1.lines[_], pos('[', memo1.lines[_]) + 1, pos(']', memo1.lines[_]) - pos('[',
memo1.lines[_]) - 1);
- break
- end;
-
 |
Ответ отправил: mvp (статус: 4-ый класс)
Время отправки: 14 августа 2006, 02:07
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Наземнов Вячеслав!
Если стоит конкретная задача вычлинить необходимые данные из текста можно воспользоваться механизмом Regular Expressions, т.е. Регулярными выражениями.
Возьмите, например, реализацию от Андрея Сорокина (http://regexpstudio.com/RU/).
Приемущество будет в том, что запрос можно изменить во время выполнения.
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|