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.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: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...
    • 1999.05.13 19:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 21:42
      허걱... 리스트박스에 판넬을 넣는것은 불가능합니다. 리스트 박스에 판넬을 넣고 또 그안에 콘트롤을 놓...
    • 북해
    • 1999.05.13 18:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.13 19:06
      북해 wrote: > > 테이블에다가 데이타를 삽입하려고 하는데요, 도무지 Insert가 안먹는 거에요. 분명...
    • 송수정
    • 1999.05.13 18:38
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 21:26
      파워러브 델파이!! 97년 3월 창간호를 참고하세요. 창간호는 무료이니 통신망에서 쉽게 구하실 수 있을것...
    • 1999.05.13 19:07
      송수정 wrote: > 제가 사용하는 것은 델파이 3.0 인데요. 어제 알려주신데로 되지 않습니다. > 3.0에서 ...
    • 안치봉
      1999.05.13 18:43
      송수정 wrote: > 제가 사용하는 것은 델파이 3.0 인데요. 어제 알려주신데로 되지 않습니다. > 3.0에서 ...
    • 북해
    • 1999.05.13 18:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.13 18:27
      북해 wrote: > > 안녕하세요. 저는 왕초보인데요. OnEnter이벤트에 대해서 잘 모르겠습니다. > 상식...
    • 이정욱
      1999.05.13 19:29
      소스들이 있다면 그냥 델4에서 열어서(열었을때 경고가 하나 나오지만 YES를 눌러서 변환을 해주시면 됩니...
    • 박상현
    • 1999.05.13 12:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.13 18:31
      박상현 wrote: > Out of System Resources 에러에 대한 설명과 대처 방법에 대하여 알려주시기 바랍니다. ...
    • 정용철
    • 1999.05.13 07:44
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Killer
      1999.05.14 01:01
      정용철 wrote: > 안녕하세요. > > 현재 저는 msaccess db를 사용하여 델파이3.0 c/s 버젼으로 개발하...
    • 신인재
      1999.05.13 09:14
      음냐 AccessDb는 DAO 를 같이 배포하여야 작동이 됩니다. 이것은 델파이에서 지원을 하지 않은 것으로 ...
    • 이호선
    • 1999.05.13 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 08:31
      당연히 질이 떨어질 수 밖에 없습니다. 내부적으로 AntiAlias를 구현하기 전에는 말이죠. 그런부분을 원...
    • 이호선
    • 1999.05.13 03:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.05.13 05:09
      이호선 wrote: > 안녕하세요 > Outlook에서 쓰는 SMTP와 POP 서버의 주소를 얻어올려면 어떻게 > 할 수 ...
    • 이호선
      1999.05.13 05:17
      신인재 wrote: > 이호선 wrote: > > 안녕하세요 > > Outlook에서 쓰는 SMTP와 POP 서버의 주소를 얻어올...
    • 송수정
    • 1999.05.13 02:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 02:36
      델파이4라면 동적 어레이를 사용하세요. 그냥.. aaa : array of integer; 해 놓고.. 크기를 잡을때 Set...
    • 송수정
      1999.05.13 18:40
      이정욱 wrote: > 델파이4라면 동적 어레이를 사용하세요. > 그냥.. > aaa : array of integer; > 해 놓...