* 사용환경 : 델파이5 / Windows Me
델파이 초보자가 문의 드립니다.
text 화일을 읽어 db Table에 넣는 기능을 구현하다가 해결법을 못찾고 있습니다.
text 화일 크기가 750 KB 정도 되는데( 14,900 lines)
문제는 Readln(FileNAme, v1, v2, ,,,) 으로 라인단위로 읽어서 테이블에 하나씩 추가하는데
화일크기가 클경우(750KB) 첫라인만 읽고 eof 이 True가 되어버리는 문제가 발생합니다.
text 화일크기를 줄여서 16,747 Bytes로 하면은(316 라인) 끝까지(316 라인) 다 읽습니다.
소스는 아래와 같습니다.
또 TMemo 및 TRichEdit 콤포넌트에서 처리 가능한 최대의 화일크기는 얼마입니까?
고수님들의 답변 부탁드립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
btnExit: TButton;
btnReadText: TButton;
btnCopyText: TButton;
btnSplit2Field: TButton;
Memo1: TMemo;
Memo2: TMemo;
edtJepumName: TEdit;
lblJepumCode: TLabel;
btnReadPart: TButton;
lblPartLineText: TLabel;
Label2: TLabel;
edtLineCount: TEdit;
procedure btnExitClick(Sender: TObject);
procedure btnReadTextClick(Sender: TObject);
procedure btnCopyTextClick(Sender: TObject);
procedure btnSplit2FieldClick(Sender: TObject);
procedure btnReadPartClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.btnExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.btnReadTextClick(Sender: TObject);
var
MyTextFile: TextFile;
S50: string[50];
JepumCode: string[20];
JepumName: string[30];
i: integer;
begin
AssignFile(MyTextFile, 'part2.txt');
Reset(MyTextFile);
Memo1.Clear;
Memo2.Clear;
try
while not Eof(MyTextFile) do
begin
Readln(MyTextFile, S50);
Memo1.Lines.Add(S50);
end;
CloseFile(MyTextFile);
Reset(MyTextFile);
while not Eof(MyTextFile) do
begin
Readln(MyTextFile, JepumCode, JepumName);
Memo2.Lines.Add(JepumCode+JepumName);
end;
finally
CloseFile(MyTextFile);
end;
end;
procedure TForm1.btnCopyTextClick(Sender: TObject);
var
MyTextFile: TextFile;
CopyTextFile: TextFile;
S: string;
i: integer;
begin
AssignFile(MyTextFile, 'MyTestFile.txt');
AssignFile(CopyTextFile, 'part_copy.txt');
Append(MyTextFile);
try
for i := 10 to 100 do
begin
S := 'This is line # ';
writeln(MyTextFile, S, i);
end;
finally
CloseFile(MyTextFile);
end;
end;
procedure TForm1.btnSplit2FieldClick(Sender: TObject);
var
MyTextFile: TextFile;
S15: string[15];
i: integer;
j: integer;
begin
AssignFile(MyTextFile, 'MyTestFile.txt');
Reset(MyTextFile);
try
while not Eof(MyTextFile) do
begin
Readln(MyTextFile, S15, j);
Memo1.Lines.Add(S15 + ' - ' + IntToStr(j));
end;
finally
CloseFile(MyTextFile);
end;
end;
procedure TForm1.btnReadPartClick(Sender: TObject);
var
PartTextFile: TextFile;
S50: string[50];
JepumCode: string[20];
JepumName: string[30];
i: integer;
begin
AssignFile(PartTextFile, 'part2.txt');
Reset(PartTextFile);
i := 0;
try
while not Eof(PartTextFile) do <<<----- 에러가 나는 부분 - 한줄 읽고
begin while loop 2번째에 while 조건을
i := i+1; 만족하여 loop를 벗어납니다.
edtLineCount.Text := intToStr(i);
Readln(PartTextFile, JepumCode, JepumName);
lblPartLineText.Caption := JepumCode+JepumName;
lblJepumCode.Caption := JepumCode;
edtJepumName.Text := JepumName;
end;
finally
CloseFile(PartTextFile);
end;
end;
end.
서승룡 wrote:
> * 사용환경 : 델파이5 / Windows Me
> 델파이 초보자가 문의 드립니다.
> text 화일을 읽어 db Table에 넣는 기능을 구현하다가 해결법을 못찾고 있습니다.
> text 화일 크기가 750 KB 정도 되는데( 14,900 lines)
> 문제는 Readln(FileNAme, v1, v2, ,,,) 으로 라인단위로 읽어서 테이블에 하나씩 추가하는데
> 화일크기가 클경우(750KB) 첫라인만 읽고 eof 이 True가 되어버리는 문제가 발생합니다.
> text 화일크기를 줄여서 16,747 Bytes로 하면은(316 라인) 끝까지(316 라인) 다 읽습니다.
>
> 소스는 아래와 같습니다.
>
> 또 TMemo 및 TRichEdit 콤포넌트에서 처리 가능한 최대의 화일크기는 얼마입니까?
>
> 고수님들의 답변 부탁드립니다.
>
>
>
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls;
>
> type
> TForm1 = class(TForm)
> btnExit: TButton;
> btnReadText: TButton;
> btnCopyText: TButton;
> btnSplit2Field: TButton;
> Memo1: TMemo;
> Memo2: TMemo;
> edtJepumName: TEdit;
> lblJepumCode: TLabel;
> btnReadPart: TButton;
> lblPartLineText: TLabel;
> Label2: TLabel;
> edtLineCount: TEdit;
> procedure btnExitClick(Sender: TObject);
> procedure btnReadTextClick(Sender: TObject);
> procedure btnCopyTextClick(Sender: TObject);
> procedure btnSplit2FieldClick(Sender: TObject);
> procedure btnReadPartClick(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.btnExitClick(Sender: TObject);
> begin
> Close;
> end;
>
> procedure TForm1.btnReadTextClick(Sender: TObject);
> var
> MyTextFile: TextFile;
> S50: string[50];
> JepumCode: string[20];
> JepumName: string[30];
> i: integer;
> begin
> AssignFile(MyTextFile, 'part2.txt');
> Reset(MyTextFile);
> Memo1.Clear;
> Memo2.Clear;
> try
> while not Eof(MyTextFile) do
> begin
> Readln(MyTextFile, S50);
> Memo1.Lines.Add(S50);
> end;
> CloseFile(MyTextFile);
> Reset(MyTextFile);
> while not Eof(MyTextFile) do
> begin
> Readln(MyTextFile, JepumCode, JepumName);
> Memo2.Lines.Add(JepumCode+JepumName);
> end;
> finally
> CloseFile(MyTextFile);
> end;
> end;
>
> procedure TForm1.btnCopyTextClick(Sender: TObject);
> var
> MyTextFile: TextFile;
> CopyTextFile: TextFile;
> S: string;
> i: integer;
> begin
> AssignFile(MyTextFile, 'MyTestFile.txt');
> AssignFile(CopyTextFile, 'part_copy.txt');
> Append(MyTextFile);
> try
> for i := 10 to 100 do
> begin
> S := 'This is line # ';
> writeln(MyTextFile, S, i);
> end;
> finally
> CloseFile(MyTextFile);
> end;
> end;
>
> procedure TForm1.btnSplit2FieldClick(Sender: TObject);
> var
> MyTextFile: TextFile;
> S15: string[15];
> i: integer;
> j: integer;
> begin
> AssignFile(MyTextFile, 'MyTestFile.txt');
> Reset(MyTextFile);
> try
> while not Eof(MyTextFile) do
> begin
> Readln(MyTextFile, S15, j);
> Memo1.Lines.Add(S15 + ' - ' + IntToStr(j));
> end;
> finally
> CloseFile(MyTextFile);
> end;
> end;
>
> procedure TForm1.btnReadPartClick(Sender: TObject);
> var
> PartTextFile: TextFile;
> S50: string[50];
> JepumCode: string[20];
> JepumName: string[30];
> i: integer;
> begin
> AssignFile(PartTextFile, 'part2.txt');
> Reset(PartTextFile);
> i := 0;
> try
> while not Eof(PartTextFile) do
> begin
> i := i+1;
> edtLineCount.Text := intToStr(i);
> Readln(PartTextFile, JepumCode, JepumName);
> lblPartLineText.Caption := JepumCode+JepumName;
> lblJepumCode.Caption := JepumCode;
> edtJepumName.Text := JepumName;
> end;
> finally
> CloseFile(PartTextFile);
> end;
> end;
> end.
>