Q&A

  • txt화일 읽어 stringgrid에 옮기는중에 에러
안녕하세여, txt화일을 읽어서 스트링그리드에 쓸려고 하는데

file1init 함수 실행하다가 txt화일이 없읍니다라는 else문

실행하고 멈춰버리네여 ,,,,,

(i/o에러나면서 pc 다운현상)

꼭좀 도와주세여 부탁합니다. 델파이를 사랑하는 초보자,,,,



unit packet;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TCSpacket = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

edtstarttime: TEdit;

edtendtime: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure editclear;

procedure file1init;

procedure file1read;

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

CSpacket: TCSpacket;



implementation



uses packet_out;

const

FILE1NAME = 'part1.txt'; // 불러올 화일 이부분



{$R *.DFM}



type

Table = Record

kukname :string;

kukno : integer;

kukstate : string;

kuktime1 : string;

kuktime2 : string;

kukdietime : string;

kukresult : string;

kukname1 : string;

end;



var

part1file : textfile;

part1data : string;

total : array [0..100] of Table;



// 입력 받은 내용을 임시로 저장할 변수

rstarttime, renddtime : string;

// 화일 내용을 임시로 저장할 변수

unit packet;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TCSpacket = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

edtstarttime: TEdit;

edtendtime: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure editclear;

procedure file1init;

procedure file1read;

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

CSpacket: TCSpacket;



implementation



uses packet_out;

const

FILE1NAME = 'part1.txt';



{$R *.DFM}



type

Table = Record

kukname :string;

kukno : integer;

kukstate : string;

kuktime1 : string;

kuktime2 : string;

kukdietime : string;

kukresult : string;

kukname1 : string;

end;



var

part1file : textfile;

part1data : string;

total : array [0..100] of Table;



// 입력 받은 내용을 임시로 저장할 변수

rstarttime, renddtime : string;

// 화일 내용을 임시로 저장할 변수

Fpart1kukname ,Fpart1kukstate,Fpart1kuktime1,Fpart1kuktime2,

Fpart1dietime, Fpart1result,Fpart1kukname1,starttime1,endtime1 :string;

Fpart1kukno : integer;

procedure TCSpacket.editclear;

begin

edtstarttime.clear;

edtendtime.clear;

edtstarttime.SetFocus;

end;



procedure TCSpacket.file1init;

begin

AssignFile(part1file,FILE1NAME);

if FileExists(FILE1NAME) then

begin

Reset(Part1File);

end

else

begin

ShowMessage('경고! *.TXT FILE이 하나가 존재 하지 않읍니다!');

close;

end;

end;





// file read 함수



procedure TCSpacket.file1read;

begin

readln(part1File,part1data);

{ Fpart1kukname,Fpart1kukno,Fpart1kukstate,Fpart1kuktime1,Fpart1kuktime2,

Fpart1dietime, Fpart1result,Fpart1kukname1,starttime1,endtime1 :string;

}

Fpart1kukname :=trim(copy(part1data,1,6));

Fpart1kukno := strToint(copy(part1data,7,2));

Fpart1kukstate := copy(part1data,16,8);

Fpart1kuktime1 := copy(part1data,27,20);

Fpart1kuktime2 := copy(part1data,48,6);

Fpart1dietime := copy(part1data,55,7);

Fpart1result := copy(part1data,63,22);

Fpart1kukname1 := copy(part1data,85,8);

end;



procedure TCSpacket.Button3Click(Sender: TObject);

begin

close;

end;



procedure TCSpacket.Button2Click(Sender: TObject);

var

i : integer;

begin

for i := 0 to 100 do

begin

if not (total[i].kukno = 0) then

begin

with CSpacket_out.stringgrid1 do

begin

cells[0,rowcount-1] := total[i].kukname;

cells[1,rowcount-1] := inttostr(total[i].kukno);

cells[2,rowcount-1] := total[i].kukstate;

cells[3,rowcount-1] := total[i].kuktime1;

cells[4,rowcount-1] := total[i].kuktime2;

cells[5,rowcount-1] := total[i].kukdietime;

cells[6,rowcount-1] := total[i].kukresult;

cells[7,rowcount-1] := total[i].kukname1;

rowcount := rowcount + 1;

end; //end of with

end;

end; // end of for

CSpacket_out.show;

end;



procedure TCSpacket.Button1Click(Sender: TObject);

var

i,j : integer;

begin

file1init;

if EOF(part1file) then

begin

closefile(part1file);

editclear;

exit;

starttime1 := trim(edtstarttime.text);

endtime1 := trim(edtendtime.text);



for i := 0 to 100 do



begin

file1read;

if EOF(part1file) then

begin

closefile(part1file);

editclear;

exit;

end;





total[i].kukname := Fpart1kukname;

total[i].kukno := Fpart1kukno;

total[i].kukstate := Fpart1kukstate;

total[i].kuktime1 := Fpart1kuktime1;

total[i].kuktime2 := Fpart1kuktime2;

total[i].kukdietime := Fpart1dietime;

total[i].kukresult := Fpart1result;

total[i].kukname1 := Fpart1kukname1;





end;

end; // for

end;

end.





1  COMMENTS
  • Profile
    이정욱 1999.05.14 03:19
    이곳의 문제는 Close;문이 문제이군요.

    Close가 있지만 ..



    function TCSpacket.file1init : Boolean;

    begin

    AssignFile(part1file,FILE1NAME);

    if FileExists(FILE1NAME) then

    begin

    Reset(Part1File);

    Result := True;

    end

    else

    begin

    ShowMessage('경고! *.TXT FILE이 하나가 존재 하지 않읍니다!');

    Result := False;

    end;

    end;



    로 바꾸시구...

    그리고 Init를 실패했을경우에는 Read를 못하게 해야 합니다.



    procedure TCSpacket.Button1Click(Sender: TObject);

    var

    i,j : integer;

    begin

    If not file1init then begin Close; Exit; end; <-- 요부분이 중요.

    if EOF(part1file) then

    begin

    closefile(part1file);

    editclear;

    exit;

    starttime1 := trim(edtstarttime.text);

    endtime1 := trim(edtendtime.text);



    for i := 0 to 100 do





    아무리 Close문을 썼지만 윈도우처럼 Event Driven System에서는 Close를 해라 라고 명령을 내리고 그 다음도 계속 실행해 버리게 되죠.

    즉, 여는데 실패하거나 그랬으면 바로 나가버려야 합니다.



    신호철 wrote:

    > 안녕하세여, txt화일을 읽어서 스트링그리드에 쓸려고 하는데

    > file1init 함수 실행하다가 txt화일이 없읍니다라는 else문

    > 실행하고 멈춰버리네여 ,,,,,

    > (i/o에러나면서 pc 다운현상)

    > 꼭좀 도와주세여 부탁합니다. 델파이를 사랑하는 초보자,,,,

    >

    > unit packet;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TCSpacket = class(TForm)

    > Label1: TLabel;

    > Label2: TLabel;

    > Label3: TLabel;

    > edtstarttime: TEdit;

    > edtendtime: TEdit;

    > Button1: TButton;

    > Button2: TButton;

    > Button3: TButton;

    > procedure editclear;

    > procedure file1init;

    > procedure file1read;

    > procedure Button3Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > CSpacket: TCSpacket;

    >

    > implementation

    >

    > uses packet_out;

    > const

    > FILE1NAME = 'part1.txt'; // 불러올 화일 이부분

    >

    > {$R *.DFM}

    >

    > type

    > Table = Record

    > kukname :string;

    > kukno : integer;

    > kukstate : string;

    > kuktime1 : string;

    > kuktime2 : string;

    > kukdietime : string;

    > kukresult : string;

    > kukname1 : string;

    > end;

    >

    > var

    > part1file : textfile;

    > part1data : string;

    > total : array [0..100] of Table;

    >

    > // 입력 받은 내용을 임시로 저장할 변수

    > rstarttime, renddtime : string;

    > // 화일 내용을 임시로 저장할 변수

    > unit packet;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TCSpacket = class(TForm)

    > Label1: TLabel;

    > Label2: TLabel;

    > Label3: TLabel;

    > edtstarttime: TEdit;

    > edtendtime: TEdit;

    > Button1: TButton;

    > Button2: TButton;

    > Button3: TButton;

    > procedure editclear;

    > procedure file1init;

    > procedure file1read;

    > procedure Button3Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > CSpacket: TCSpacket;

    >

    > implementation

    >

    > uses packet_out;

    > const

    > FILE1NAME = 'part1.txt';

    >

    > {$R *.DFM}

    >

    > type

    > Table = Record

    > kukname :string;

    > kukno : integer;

    > kukstate : string;

    > kuktime1 : string;

    > kuktime2 : string;

    > kukdietime : string;

    > kukresult : string;

    > kukname1 : string;

    > end;

    >

    > var

    > part1file : textfile;

    > part1data : string;

    > total : array [0..100] of Table;

    >

    > // 입력 받은 내용을 임시로 저장할 변수

    > rstarttime, renddtime : string;

    > // 화일 내용을 임시로 저장할 변수

    > Fpart1kukname ,Fpart1kukstate,Fpart1kuktime1,Fpart1kuktime2,

    > Fpart1dietime, Fpart1result,Fpart1kukname1,starttime1,endtime1 :string;

    > Fpart1kukno : integer;

    > procedure TCSpacket.editclear;

    > begin

    > edtstarttime.clear;

    > edtendtime.clear;

    > edtstarttime.SetFocus;

    > end;

    >

    > procedure TCSpacket.file1init;

    > begin

    > AssignFile(part1file,FILE1NAME);

    > if FileExists(FILE1NAME) then

    > begin

    > Reset(Part1File);

    > end

    > else

    > begin

    > ShowMessage('경고! *.TXT FILE이 하나가 존재 하지 않읍니다!');

    > close;

    > end;

    > end;

    >

    >

    > // file read 함수

    >

    > procedure TCSpacket.file1read;

    > begin

    > readln(part1File,part1data);

    > { Fpart1kukname,Fpart1kukno,Fpart1kukstate,Fpart1kuktime1,Fpart1kuktime2,

    > Fpart1dietime, Fpart1result,Fpart1kukname1,starttime1,endtime1 :string;

    > }

    > Fpart1kukname :=trim(copy(part1data,1,6));

    > Fpart1kukno := strToint(copy(part1data,7,2));

    > Fpart1kukstate := copy(part1data,16,8);

    > Fpart1kuktime1 := copy(part1data,27,20);

    > Fpart1kuktime2 := copy(part1data,48,6);

    > Fpart1dietime := copy(part1data,55,7);

    > Fpart1result := copy(part1data,63,22);

    > Fpart1kukname1 := copy(part1data,85,8);

    > end;

    >

    > procedure TCSpacket.Button3Click(Sender: TObject);

    > begin

    > close;

    > end;

    >

    > procedure TCSpacket.Button2Click(Sender: TObject);

    > var

    > i : integer;

    > begin

    > for i := 0 to 100 do

    > begin

    > if not (total[i].kukno = 0) then

    > begin

    > with CSpacket_out.stringgrid1 do

    > begin

    > cells[0,rowcount-1] := total[i].kukname;

    > cells[1,rowcount-1] := inttostr(total[i].kukno);

    > cells[2,rowcount-1] := total[i].kukstate;

    > cells[3,rowcount-1] := total[i].kuktime1;

    > cells[4,rowcount-1] := total[i].kuktime2;

    > cells[5,rowcount-1] := total[i].kukdietime;

    > cells[6,rowcount-1] := total[i].kukresult;

    > cells[7,rowcount-1] := total[i].kukname1;

    > rowcount := rowcount + 1;

    > end; //end of with

    > end;

    > end; // end of for

    > CSpacket_out.show;

    > end;

    >

    > procedure TCSpacket.Button1Click(Sender: TObject);

    > var

    > i,j : integer;

    > begin

    > file1init;

    > if EOF(part1file) then

    > begin

    > closefile(part1file);

    > editclear;

    > exit;

    > starttime1 := trim(edtstarttime.text);

    > endtime1 := trim(edtendtime.text);

    >

    > for i := 0 to 100 do

    >

    > begin

    > file1read;

    > if EOF(part1file) then

    > begin

    > closefile(part1file);

    > editclear;

    > exit;

    > end;

    >

    >

    > total[i].kukname := Fpart1kukname;

    > total[i].kukno := Fpart1kukno;

    > total[i].kukstate := Fpart1kukstate;

    > total[i].kuktime1 := Fpart1kuktime1;

    > total[i].kuktime2 := Fpart1kuktime2;

    > total[i].kukdietime := Fpart1dietime;

    > total[i].kukresult := Fpart1result;

    > total[i].kukname1 := Fpart1kukname1;

    >

    >

    > end;

    > end; // for

    > end;

    > end.

    >

    >





    • 북해
    • 1999.05.14 19:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 무명인
      1999.05.15 05:05
      북해 wrote: > 안녕하세요. SQL문을 사용하려는데 자꾸 에러가 나네요. Edit.Text가 Change될 때마다 아래...
    • 왕초보
      1999.05.14 20:18
      with query1 do Begin sql.add('select * from 테이블'); sql.add('where 성명 like '''+edit1.Text+'%...
    • 북해
    • 1999.05.14 19:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 20:15
      보통 컴포넌트를 설치하는 방법은 두가지 입니다. 첫째, PAS나 .DCU파일을 가지고 하는방법. 둘째, DPK나...
    • 왕초보
      1999.05.14 20:15
      델파이 component 메뉴에서 install component를 선택하시면 컴포넌트 모듈(*.pas, *.dcu)를 선택할 수 있...
    • 김승현
    • 1999.05.14 06:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.14 18:16
      저도 초보라서.. 정확한 답변이 될런지는 모르겠지만 도움일 될까해서 제가 Dll에서 db쓰는 source를 알...
    • 땡글이
    • 1999.05.14 05:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.05.14 18:08
      땡글이 wrote: > 제가 몇일전에 TreeView에 대해 질문은 올렸더니 고맙게도 답장을 써주셨더군요. > 근데...
    • 1999.05.14 02:45
      이누리 wrote: > EditBox 내의 오른쪽 정렬이 되지 않는 관계로.. > > 편법으로.. 문자열앞에 공백을 ...
    • 이영호
    • 1999.05.14 02:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.14 02:49
      이영호 wrote: > 오라클에 접속하려고 데이타베이스컴포넌트의 속성을 아래와 같이 주었는데 > db1.Pa...
    • 이정욱
      1999.05.14 03:12
      ParentComp := GetOwner as TWinControl; 로 고쳐서 해보세요... 장담은 못합니다... ^^; 왕초보 wr...
    • 강지영
    • 1999.05.14 01:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.14 01:29
      강지영 wrote: > ShellExecute 를 사용하려고 하는데 > 파라미터 전달하는 것을 모르겠습니다. > 예를 ...
    • 왕초보
      1999.05.14 01:27
      ShellExecute (Handle,'open', 'notepad','c:config.sys','',SW_SHOWNORMAL); 와 같이 파리미터...
    • 왕초보
    • 1999.05.14 00:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:27
      아래의 문을 참고해서 디자인타임일경우에는 못하게 하시고 런타임인경우에만 실행하게 해보세요. if ...
    • 건맨
    • 1999.05.13 23:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.14 00:07
      Interbase 를 설치하면 자동으로 깔리는 PDF문서를 참조하세요... 영문으로 되어 있지만 모두 출력을 하면...
    • 정용철
    • 1999.05.13 23:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:34
      NMOCOD.DLL, NMORENU.DLL, NMSCKN.DLL, NMFTPSN.DLL, OLEPRO32.DLL 을 같이 배포하셔야 합니다. 복사만 ...
    • 은철수
    • 1999.05.13 22:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 은철수
      1999.05.14 02:00
      하윤철 wrote: > 같은 질문의 답을 델파이 팁페이지에서 구할수 있었습니다... > > http://board.membe...
    • 이호선
    • 1999.05.13 21:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 23:25
      NCHitTest 메세지가로채서 사용하는 방법과, 또 하나의 ReleaseCapture와 SendMessage를 사용하는 두가지 ...
    • 북해
    • 1999.05.13 20:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.13 21:38
      북해 wrote: > 비트맵버튼에서,혹은 그냥 버튼이라도, Caption에 들어갈 글자를 세로로 표기할 수 있나요...
    • 이정욱
      1999.05.13 21:20
      음냐.. 없습니다... 즉, 다른 컴포넌트를 사셔야 합니다. 아니면 Image를 버튼화 시켜서 그림으로 넣으...
    • 신호철
    • 1999.05.13 19:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:19
      이곳의 문제는 Close;문이 문제이군요. Close가 있지만 .. function TCSpacket.file1init : Boolean; ...
    • 북해
    • 1999.05.13 19:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 21:29
      포커스를 가진다는것은 제일 쉽게 말해서 현재 카렛(도스시절의 커서)이 있는 콘트롤을 지칭합니다. 카렛...
    • 신현숙
      1999.05.15 01:37
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...
    • 남호열
      1999.05.15 01:07
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...
    • 하윤철
      1999.05.13 22:36
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...