Q&A

  • filewrite를 공부하는데 잘안되서 그렇습니다.
procedure TMainForm.BtndataloadClick(Sender: TObject);
var
   tmp_write : String;
   tmp_jumin_no : String;
   tmp_reg_date : String;
   tmp_st_gubun : String;
   tmp_name_han : String;
   tmp_bf_dpt : String;
   tmp_nw_dpt : String;
   tmp_home_addr : String;
   tmp_file_num, tmp_size, tmp_chek : Integer;
   b_chek : BOOLEAN;
begin
  
   is_file_name := DirectoryListBox1.Directory;
   is_file_name := is_file_name + '\' + edit2.Text;
  
   Oraquery2.Close;
   Oraquery2.SQL.Clear;
   ORaquery2.SQL.Add('SELECT JUMIN_NO, REG_DATE, ST_GUBUN, NAME_HAN, BF_DPT, NW_DPT, HOME_ADDR ');
   Oraquery2.SQL.Add('FROM   01 ');
   Oraquery2.sql.Add('WHERE JUMIN_NO = :ls_jumin_no ');
   Oraquery2.ParamByName('ls_jumin_no').AsString := is_jumin_no;
   Oraquery2.ExecSQL;
   Oraquery2.Active := true;

   IF FileExists(is_file_name) THEN
      DeleteFile(pChar(is_file_name));

   tmp_file_num := FileCreate(is_file_name);

   IF tmp_file_num < 0 THEN
      begin
         Messagedlg('파일오픈 오류', mterror, [mbok], 0);
         FileClose(tmp_file_num);
         exit;
      end;
   Oraquery2.First;
   While not Oraquery2.Eof do
      begin
         tmp_jumin_no := Oraquery2.FieldByName('jumin_no').AsString;
         tmp_reg_date := Oraquery2.FieldByName('reg_date').AsString;
         tmp_st_gubun := Oraquery2.FieldByName('st_gubun').AsString;
         tmp_name_han := Oraquery2.FieldByName('name_han').AsString;
         tmp_bf_dpt   := Oraquery2.FieldByName('bf_dpt').AsString;
         tmp_nw_dpt   := Oraquery2.FieldByName('nw_dpt').AsString;
         tmp_home_addr := Oraquery2.FieldByName('home_addr').AsString;
         tmp_write := tmp_jumin_no + ',' + tmp_reg_date + ',' + tmp_st_gubun + ',' +
                      tmp_name_han + ',' + tmp_bf_dpt + ',' + tmp_nw_dpt + ',' +
                      tmp_home_addr;
         tmp_size := Length(tmp_write);
         tmp_chek := FileWrite(tmp_file_num, tmp_write, tmp_size);
         IF tmp_chek < 0 THEN
            begin
               Messagedlg('파일쓰기 오류', mterror, [mbok], 0);
               FileClose(tmp_file_num);
               exit;
            end;
         Oraquery2.Next;
      end;
   FileClose(tmp_file_num);
   Messagedlg('파일생성 성공', mtInformation, [mbok], 0);
end;

파일은 제위치에 생성이 되는데 filewrit해서 파일을 열어보면 내용이 깨져서 나옵니다.
그리고 보통 filewrite에서 라인모드로 입력할지 아닐지 정하는것 같기도 한데(?)
전부 한줄로 이어져서 뿌려지네여. (데이터는 5줄)
하루종일 인터넷 찾고 책찾다가 안되서 도움요청합니다. ^^
2  COMMENTS
  • Profile
    최용일 2006.02.22 11:44
    안녕하세요. 최용일입니다.

    아래와 같이 고치세요...
    tmp_chek := FileWrite(tmp_file_num, tmp_write, tmp_size);
    ==>tmp_chek := FileWrite(tmp_file_num, tmp_write[1], tmp_size);

    FileOpen, FileWrite, FileClose등과 같은 함수들은 라인모드(?), Text, Binary 같은 구분이 없습니다. 쓴대로 써질뿐입니다. 줄바꿈이 필요하면 줄바꿈기호도 직접 넣어주셔야 합니다.

    줄바꿈은... Carriage Return + Line Feed
    tmp_write에 데이터 넣을때 CR+LF를 추가해주시면 되죠...
    tmp_write := tmp_jumin_no + ',' + tmp_reg_date + ',' + tmp_st_gubun + ',' +
        ....
        tmp_home_addr + #13#10;

    FileOpen, FileWrite, FileClose같은 함수들은 가장 저수준의 입출력함수들이고, 이 외에 비슷한 저수준의 함수로 AssignFile, Reset, Rewrite, WriteLn, CloseFile등이 있고, CreateFile, OpenFile, ReadFile등과 같은 API 함수들도 있습니다. TFileStream과 같이 객체화된서 사용하기 편한것들도 있죠...

    또한 이런 경우는 TStringList를 쓰셔서 간단히 할 수도 있습니다.

    ^^ 항상 즐코하세요...

  • Profile
    박휘범 2006.02.22 18:22
    냉무 ^^