서영택 wrote:
> *.txt파일의 구조는 Header Record, Data Recodr, Trailer Record
> 3부분으로 나뉘어져있고
> 각레코드별 구분코드가 있고 80칼럼을 기준으로 1Record드가 작성되는데
> 레코드별로 라인구분없이 연속적으로 작성된 레코드입니다.
> Header와 Trailer는 1나씩 존재하지만 Data는 여러개가 존재합니다.
> 이것을 db에 저장하려고 하는데 방법을 몰라서 ...
> 빠른답변을 기다리겠습니다.
>
> -------------->Record구조<--------------
> [Header Record]
> H_Gubun : String[2];
> H_GiroNo : String[7];
> H_Date : String[6];
> H_No : String[6];
> H_Space : String[59];
>
> [Data Record]
> D_Gubun : String[2];
> D_Serial : String[7];
> D_Rdate : String[6];
> D_Code : String[6];
> D_FindNo : String[20];
> D_Amt : String[10];
> D_FrameNo : String[6];
> D_JangGubun : String[1];
> D_Sdate : String[6];
> D_Space : String[16];
>
> [Trailer Record]
> T_Gubun : String[2];
> T_Cnt : String[7];
> T_Amt : String[12];
> T_RejectCnt : String[7];
> T_RejectAmt : String[12];
> T_InfoCnt : String[7];
> T_InfoAmt : String[12];
> T_TotCnt : String[7];
> T_TotAmt : String[12];
> T_Space : String[2];
>
> 감사합니다.
안녕하세요 김영대입니다
엑셀의 csv 파일처럼 콤마로 구분된 파일이라면 공개된 소스가 많은데
질문을 보니 record 구조의 파일을 읽어서 처리하는 문제인것 같습니다
아래는 설명상 제 임의로 만든 레코드로 전체적인 흐름만 파악해 보세요
type
TDataIn = record
flag : string[1]; {'C':계속, 'E':끝}
seqno : string[4]; {연번}
medno : string[15]; {의료보험번호}
juminid : string[14]; {주민번호}
korname : string[12]; {성명}
medgr : string[5]; {등급}
monpay : string[11]; {보수월액, '999,999,999'}
meddate : string[10]; {자격취득일, yyyy.mm.dd}
dismonyn : string[1]; {취득월면제여부}
medbld : string[10]; {근무지, '서울시'}
end;
var
DataIn: TDataIn;
Fin: file of TDataIn;
....
AssignFile(Fin, 'data.txt');
System.Reset(Fin); {file open}
System.Seek(Fin, 0); {FilePoint 0}
Read(Fin, DataIn);
while not Eof(Fin) then
begin
QRL_seqno.Caption := seqno;
QRL_medno.Caption := medno;
QRL_juminid.Caption := juminid;
QRL_korname.Caption := korname;
QRL_medgr.Caption := SysUtils.Trim(medgr);
QRL_monpay.Caption := monpay;
QRL_meddate.Caption := meddate;
QRL_dismonyn.Caption := dismonyn;
QRL_medbld.Caption := medbld;
if (DataIn.Flag = 'E') then // 특정 구분의 레코드일때...
begin
QRL_medbld.Caption := '';
end;
Read(Fin, DataIn);
end;
System.Close(Fin);
> 서영택 wrote:
> > *.txt파일의 구조는 Header Record, Data Recodr, Trailer Record
> > 3부분으로 나뉘어져있고
> > 각레코드별 구분코드가 있고 80칼럼을 기준으로 1Record드가 작성되는데
> > 레코드별로 라인구분없이 연속적으로 작성된 레코드입니다.
> > Header와 Trailer는 1나씩 존재하지만 Data는 여러개가 존재합니다.
> > 이것을 db에 저장하려고 하는데 방법을 몰라서 ...
> > 빠른답변을 기다리겠습니다.
> >
> > -------------->Record구조<--------------
> > [Header Record]
> > H_Gubun : String[2];
> > H_GiroNo : String[7];
> > H_Date : String[6];
> > H_No : String[6];
> > H_Space : String[59];
> >
> > [Data Record]
> > D_Gubun : String[2];
> > D_Serial : String[7];
> > D_Rdate : String[6];
> > D_Code : String[6];
> > D_FindNo : String[20];
> > D_Amt : String[10];
> > D_FrameNo : String[6];
> > D_JangGubun : String[1];
> > D_Sdate : String[6];
> > D_Space : String[16];
> >
> > [Trailer Record]
> > T_Gubun : String[2];
> > T_Cnt : String[7];
> > T_Amt : String[12];
> > T_RejectCnt : String[7];
> > T_RejectAmt : String[12];
> > T_InfoCnt : String[7];
> > T_InfoAmt : String[12];
> > T_TotCnt : String[7];
> > T_TotAmt : String[12];
> > T_Space : String[2];
> >
> > 감사합니다.
>
> 안녕하세요 김영대입니다
> 엑셀의 csv 파일처럼 콤마로 구분된 파일이라면 공개된 소스가 많은데
> 질문을 보니 record 구조의 파일을 읽어서 처리하는 문제인것 같습니다
> 아래는 설명상 제 임의로 만든 레코드로 전체적인 흐름만 파악해 보세요
>
> type
> TDataIn = record
> flag : string[1]; {'C':계속, 'E':끝}
> seqno : string[4]; {연번}
> medno : string[15]; {의료보험번호}
> juminid : string[14]; {주민번호}
> korname : string[12]; {성명}
> medgr : string[5]; {등급}
> monpay : string[11]; {보수월액, '999,999,999'}
> meddate : string[10]; {자격취득일, yyyy.mm.dd}
> dismonyn : string[1]; {취득월면제여부}
> medbld : string[10]; {근무지, '서울시'}
> end;
>
> var
> DataIn: TDataIn;
> Fin: file of TDataIn;
>
> ....
> AssignFile(Fin, 'data.txt');
> System.Reset(Fin); {file open}
> System.Seek(Fin, 0); {FilePoint 0}
>
> Read(Fin, DataIn);
> while not Eof(Fin) then
> begin
> QRL_seqno.Caption := seqno;
> QRL_medno.Caption := medno;
> QRL_juminid.Caption := juminid;
> QRL_korname.Caption := korname;
> QRL_medgr.Caption := SysUtils.Trim(medgr);
> QRL_monpay.Caption := monpay;
> QRL_meddate.Caption := meddate;
> QRL_dismonyn.Caption := dismonyn;
> QRL_medbld.Caption := medbld;
> if (DataIn.Flag = 'E') then // 특정 구분의 레코드일때...
> begin
> QRL_medbld.Caption := '';
> end;
> Read(Fin, DataIn);
> end;
> System.Close(Fin);
>
>
김영대님의 답변에 감사드립니다.
제가 실력이 부족하여 해결을 하지못하고 염치없게 또질문을 드립니다.
질1)Read()라는 함수는 한번에 모든 데이타를 읽어오는것입니까?
질2)ReadLn()함수는 어떤 기능을 하는것입니까?