Q&A

  • Append 관련 질문.
안녕하세요
맨날 눈팅으로 기존자료 검색하다가 처음으로 글 올려봅니다.

함수가 하는 역활은 아주 간단합니다.
파일이 없으면 생성하고, 파일이 있으면 append를 이용하여
원하는 문자열만 입력하려고 합니다.
그런데 처음에 파일이 없어서 생성하고 쓸 때는 1줄만 들어가는데,
append로 파일을 열어서 쓰면, 1줄만들어갈 것이 여러줄이 주루룩 들어갑니다.
append 쪽에서 브레이크 걸어서 디버깅을 하면 msg만 정확하게 출력이 됩니다.

이유를 잘 모르겠습니다.
도움을 바라며, 소스를 올려 봅니다.

//////////////////////
<!--CodeS-->
function SAVE_DEBUG_VPP(fName : String) : Boolean;
var
   F, TF : TextFile;
   strTmp,strFName ,strFName1 : String;
   i,j   :  integer;
begin
        Result := FALSE;
   strTmp := '';
   strFName :=  frmMain.cl_MODEL.Caption;
   strFName1        := _ExecPath + 'DEBUG\ ' + strFName + fName + '.TXT';
   _MODELLastUpdate := FormatDateTime('yyyy-mm-dd (ddd) AM/PM hh:mm:ss',Now);

   if FileExists( strFName1 ) then   //파일 유/무를 확인후 파일 생성하고 쓰던지, 있으면 이어서 쓴다.
   begin
      AssignFile(TF, strFName1 );
      Append( TF );                         //<-- append만 이용하면 여러줄이 계속 들어가네요

      WriteLn(TF,_MODELLastUpdate);
      WriteLn(TF, DMMData);

      CloseFile(TF);
   end
   else
   begin
      AssignFile(F, strFName1 );
      Rewrite( F );

      WriteLn(F,_MODELLastUpdate);
      WriteLn(F, DMMData);

      CloseFile(F);
   end;

   Result := TRUE;
end;
<!--CodeE-->
3  COMMENTS
  • Profile
    송영석 2008.04.02 23:13

    음 제가 보기에는 소스로는 별 문제 없이 실행되는 거 같은데요

    제가 테스트 한 소스는

    procedure TForm1.Button1Click(Sender: TObject);
    var
      F : TextFile;
      strTmp,strFName ,strFName1 : String;
      _MODELLastUpdate : string;
      Check : Boolean;
    begin

      strTmp := '';
      strFName := Self.Caption;
      strFName1:= 'd:\test.txt';
      _MODELLastUpdate := FormatDateTime('yyyy-mm-dd (ddd) AM/PM hh:mm:ss',Now);

      AssignFile(F, strFName1 );

      if FileExists( strFName1 ) then
        Append( F );
      else
        Rewrite( F );

       WriteLn(F,_MODELLastUpdate);
       WriteLn(F, 'test');

       CloseFile(F);

    end;

    혹시 파일에 이렇게 표시되는데

    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:33
    test

    아래와 같이 표시되길 원하시는 건지요?

    2008-03-31 (월) PM 08:39:21 test
    2008-03-31 (월) PM 08:39:33 test

    그렇다면 Writeln 대신에 Write 함수를...

    아니라면 다시 질문주세요 ^^ 확인해보도록 할게요
  • Profile
    최진영 2008.04.02 23:23


    답변 감사합니다.
    제가 원하는 답도 송영석님이 출력하신 것처럼
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:33
    test
    이렇기를 바랍니다. 그런데 실제 데이터를 보면. 두번 나올 것이.
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:21
    test
    2008-03-31 (월) PM 08:39:33
    test
    2008-03-31 (월) PM 08:39:33
    test
    2008-03-31 (월) PM 08:39:33
    test
    2008-03-31 (월) PM 08:39:33
    test
    2008-03-31 (월) PM 08:39:33
    test
    2008-03-31 (월) PM 08:39:31
    test
    2008-03-31 (월) PM 08:39:33
    test

    이런식으로 쭉 나옵니다 +_+
    쉬운 구문같은데 이거 당황스럽네요 ^^;;
  • Profile
    송영석 2008.04.02 23:28
    그렇다는 것은

    function SAVE_DEBUG_VPP(fName : String) : Boolean;

    이 함수를 호출하는 부분에

    혹시 반복문이나

    여러번 호출하게 되어 있는 구조가 아닐까요?

    새 프로젝트 하나 만들어서 테스트 해보세요

    그래도 안된다면 function SAVE_DEBUG_VPP(fName : String) : Boolean;

    이 함수 호출하는 부분까지 올려주신다면 쉽게 발견할 수 있을 듯 한데요