Q&A

  • 도와주세요...EOF인식을 잘 못하네요.
test.log라는 파일을 열어서 그 안에 있는 로그를 열어서 처리하는 프로그램을 만들려고 하는데요... 이상한 로그때문인지... 중간 까지만 read하다가
그냥 끝나버리네요...ㅠㅠ
어찌해야 되는지....
아예 파일을 끝내버리니... exclude 로 처리할 수도 없구요.

var
  F1: TextFile;
  S : String;
begin
    AssignFile(F1,'test.log');
    Reset(F1);
      while not Eof(F1) do
      begin
        Readln(F1,S);
        memo1.Lines.Add(S);
      end;
    CloseFile(F1);
end;

>> test.log
2003-12-06 19:10:52 210.125.13.166 - W3SVC3 COMPASS-KT01 61.78.35.12 80 GET /NULL.IDAkjkinter CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC%u0aeb%ub890%udacf%u77ee%u0000%u0000%u838b%u0094%u0000%u408b%u0564%u0150%u0000%ue0ff%u9090=x&
1  COMMENTS
  • Profile
    강인규 2004.02.12 02:36
    아마도 스트링에 담을 수 없는 Char값이 들어가 있어 그런거 같습니다.

    뭐 얼기설기 짠 코드입니다만 뭐 이런 정도 체크를 해주시면 메모장에 찍을 수 있을것 같습니다.

    function ExchangeNonPrinterbleChar(Source : String; ExchangeChar: Char; Const StartingPoint: DWORD=0): String;
    var
      i : Integer;
    begin
      i := StartingPoint;
      Result := '';
      while i < Length(Source) do
      begin
        if Ord(Source[i]) < $80 then
        begin
          if ((Ord(Source[i]) >= $20) and (Ord(Source[i]) <= $7E)) or (Source[i] in [#10, #13]) then
            Result := Result + Source[i]
          else
            Result := Result + ExchangeChar;
          inc(i);
        end
        else
        begin
          Result := Result + Source[i] +Source[i+1];
          inc(i, 2);
        end;
      end;
    end;

    String에 담지말고 Cahr 배열에 담아서 변환한다음 메모장에 뿌리면 되겠죠?