Q&A

  • 파일에 있는 내용을 Read 하는중에...
안녕하세요..

델파이 초보 입니다..^^;

어제부터 파일 컨트롤에 대해서 이것 저것 공부 해 보구 있는데, 잘 안되는 부분이 있어서 질문 올립니다.

일단 파일을 읽고 특정 부분의 위치로 이동해서 그 위치 이후에 있는 문자들을 access하는
프로그램을 해 보고 있는데, 어디서 잘 못됐는지 마지막 부분에 자꾸 이상한 문자들이 나오네요.

소스는 아주 간단합니다.

////////////////////////////////////////////////////

procedure TForm1.Button1Click(Sender: TObject);
var
   fh:Integer;
   Buffer:array [1..1024] of char;
   sTest:String;
   iCount, ipos, iFsize:Integer;
begin
        fh := fileopen('C:Project테스트.htm',fmOpenRead);
        if fh <> -1 then begin
          iCount   := FileRead(fh,buffer,sizeof(buffer));
          ipos := pos('--->',buffer);  
          //htm 파일에서 '--->' 가 있는 곳의 위치를 찾습니다.
          iFsize   := FileSeek(fh,0,2);
          sTest   := copy(Buffer,ipos+4,iFsize);
            
          showmessage('['+sTest+']');
          //여기서 테스트로 출력의 해 보면 뒤에 있는 ']' 부분이 출력이 되지 않습니다.
          //확인해 보니까 마지막에 이상한 문자가 들어있던데...왜 그러는 건지 이유를 모르겠네요...-.-;

          fileclose(fh);
        end
        else begin
          showmessage('파일 오픈중 에러가 발생했습니다.');
          fileClose(fh);
        end;
end;

////////////////////////////////////////////////////

그럼 고수님들의 도움을 부탁드립니다.
좋은 하루되세요..^^
2  COMMENTS
  • Profile
    김성원 2002.02.19 22:23
    안녕하세여 왕초보입니다.
    음 아래의 내용을 보면 산수계산이 좀 틀린것 같네염.

              iCount   := FileRead(fh,buffer,sizeof(buffer));
              ipos := pos('--->',buffer);  
              //htm 파일에서 '--->' 가 있는 곳의 위치를 찾습니다.
              iFsize   := FileSeek(fh,0,2);
              sTest   := copy(Buffer,ipos+4,iFsize);

    위 부분에서 iFSize는 화일의 크기인것 같습니다.
    근데.. 분명히 읽어 오신 내용에서 iPos + 4부터 나머지 부분만을 읽어야하는데 이를 무시하고 전체 화일 크기 만큼 읽어 오기 때문에 ShowMessage부분에서 미쳐 다 화면에 출력할수 없어서 짤려 보이는것 같습니다.

    따라서 아래 와 같이 수정 하면 간단히 수정이 될것 같네염.

              iFsize   := FileSeek(fh,0,2) - iPos + 4;  <-- 이부분을 수정
              sTest   := copy(Buffer,ipos+4,iFsize);

    도움이 되시길..
  • Profile
    김정원 2002.02.19 23:29
    정말 고맙습니다..^^
    많은 도움이 됐네요...