안녕하세여, 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.
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.
>
>