안녕하세요. 전 델파이 초보입니다.
다름이 아니라 제가 지금 Grid에다 항목을 입력하고 그것을 파일에 저장한 후에 다시 읽어오는 프로그램을 짜고 있는데 입력된 항목을 파일에 저장하는 데까지는 끝났는데 그 파일을 다시 그 Grid에 불러오는 것이 되지 않네요.
고수님들의 지도 부탁드리겠습니다.
아래는 제가 짠 소스입니다.
좀 난잡하지만 이해해 주시고 봐 주세요.
unit device4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Title : array[0..8] of String
= ('Device List','Device Name', 'Company', '수량','구입년도','Model Name','Serial Number','고장유무','용도');
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
// 행과 열의 크기를 결정합니다.
StringGrid1.RowCount := 31;
StringGrid1.ColCount := 9;
// 행과 열에 들어갈 제목을 넣는다.
StringGrid1.Cells[0,1] := 'Routine Switcher';
StringGrid1.Cells[0,2] := 'Video Server';
StringGrid1.Cells[0,5] := 'VCR';
StringGrid1.Cells[0,6] := 'DA Convertor';
StringGrid1.Cells[0,8] := 'Serial Hub';
StringGrid1.Cells[0,10] := 'PGM Monitor';
StringGrid1.Cells[0,12] := 'Keyborad Monitor Mouse Switcher';
StringGrid1.Cells[0,13] := 'Rom Writer';
StringGrid1.Cells[0,15] := 'Emulator';
StringGrid1.Cells[0,17] := 'ISA 확장슬롯';
StringGrid1.Cells[0,19] := 'Line Monitor';
StringGrid1.Cells[0,20] := 'Device Server';
StringGrid1.Cells[0,21] := 'ECP';
StringGrid1.Cells[0,22] := 'MCS3';
StringGrid1.Cells[0,24] := 'TCD';
StringGrid1.Cells[0,25] := 'Rack';
StringGrid1.Cells[0,26] := 'Ethernet Hub';
StringGrid1.Cells[0,29] := 'Rom Eraser';
for i:= 0 to StringGrid1.ColCount-1 do
StringGrid1.Cells[i, 0] := Title[i];
end;
procedure TForm1.Button2Click(Sender: TObject);
var
sTemp : string;
f:textfile;
Col_1, Row_1 : integer;
begin
// 파일을 불러온다
opendialog1.Execute;
Assignfile(f, opendialog1.FileName);
Reset(f);
for Col_1 := 1 to StringGrid1.Colcount-2 do
begin
for Row_1 := 1 to StringGrid1.Rowcount-2 do
begin
Readln(f,stemp);
StringGrid1.Cells[Col_1, Row_1] := sTemp;
end;
closefile(f);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Col, Row : integer;
F1 : TextFile;
sTemp_1 : string;
begin
// 입력된 자료를 파일에 저장한다.
opendialog1.Execute;
Assignfile(F1, opendialog1.FileName);
Rewrite(F1);
for Col := 1 to StringGrid1.ColCount-2 do
begin
for Row :=1 to StringGrid1.RowCount-2 do
begin
sTemp_1 := StringGrid1.Cells[Col, Row];
Writeln(F1, sTemp_1);
end;
end;
CloseFile(F1);
end;
end.
그리드에서 한줄을 읽어서 파일에다가 한줄씩 저장을 하네요...
일단 이렇게 저장을 하면 다시 읽어올때 어떤게 어떤자료인지 알수가 없네요
그러니까.. 일단 저장할때 적당한 구분자를 두어서 저장을 하시는게 좋을꺼 같아요
예를 들어 저장할때
procedure TForm1.Button3Click(Sender: TObject);
var
Col, Row : integer;
F1 : TextFile;
sTemp_1 : string;
begin
// 입력된 자료를 파일에 저장한다.
opendialog1.Execute;
Assignfile(F1, opendialog1.FileName);
Rewrite(F1);
for Col := 1 to StringGrid1.ColCount-2 do
begin
for Row :=1 to StringGrid1.RowCount-2 do
begin
sTemp_1 := StringGrid1.Cells[Col, Row] + '|';
// '|'라는 구분자를 넣어서 저장을 하는거죠
Writeln(F1, sTemp_1);
end;
end;
CloseFile(F1);
end;
위처럼 저장을 한 후 파일에서 읽어들일때는
'|'를 기준으로 해당 데이터를 읽어오시면 되겠죠...
그리고 굳이.. 파일에다가 저장을 하셔야 하는지
이런부분은 db를 이용하면 편하게 쓰실텐데요.....