Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > onDataAvailable в IdTelnet


Автор: Allbert 31.3.2009, 09:37
День добрый! Ниже приведен код, отображающий в Memo1 данные, полученные с сервера через Telnet-клиент. Подскажите, пожалуйста, как его изменить, чтобы не отображались данные с нулевой длиной? Сервер постоянно посылает нулевые сообщения, это мешает работе. Хочется, чтобы отображались только полезные сообщения. Заранее спасибо!

Код

procedure TForm1.IdTelnet1DataAvailable(
Sender: TidTelnet; const Buffer: String);
const
   CR=#13;
   LF=#10;
var
   Start, Stop: Integer;
begin
       Memo1.Lines.Add('');
       Start:=1;
       Stop:=Pos(CR, Buffer);
       if Stop=0 then
       Stop:=Length(Buffer)+1;
         while Start<=Length(Buffer) do
           begin
            Memo1.Lines.Strings[Memo1.Lines.Count-1]:=
            Memo1.Lines.Strings[Memo1.Lines.Count-1]+
            Copy(Buffer, Start, Stop-Start);
            if Buffer[Stop]=CR then
              begin
                 Memo1.Lines.Add('');
              end;
            Start:=Stop+1;
            if Start>Length(Buffer) then
            Break;
            if Buffer[Start]=LF then
            Start:=Start+1;
            Stop:=Start;
            while(buffer[Stop]<>CR) and (Stop<=Length(Buffer)) do
            Stop:=Stop+1;
           end;
end;

Автор: ArthurX 2.6.2009, 13:04
Цитата(Allbert @ 31.3.2009,  09:37)
...Сервер постоянно посылает нулевые сообщения...

Засунь весь код от begin до end в условие:

Код

if Length(Buffer)>0
  then begin
              <код>
           end;


пустые строки перестанут приходить.

А вообще этот код из примера idtelnet немного косячный, вставляет кучу пустых строк несчитая нулевые датаавейлабл. Я его немного доработал напильником smile

Вставь вместо этого 20этажного кода всего три строчки и посмотри на результат:

Код

var str: string;
begin
if Length(Buffer)>0
  then begin
                str:=StringReplace(Buffer,#13#10#13,#13#10,[rfReplaceAll, rfIgnoreCase]);
                str:=StringReplace(str,#13#10#13#10#10#13,#13#10#13#10,[rfReplaceAll, rfIgnoreCase]);
                Memo.Lines.Add(str);
           end;
end;



M
THandle
Модератор: используйте подсветку кода!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)