아래와 같이 소스를 만들어서 실행을 했는데..
잘안되네요 ㅜ.ㅜ
제가 무엇을 잘못한거죠? 이상한 문자만 저장이 됩니다.
그리고 마지막에 0D 0A(#13 #10)이 들어가는데,
이것이 들어가면 안되거든요
레코드 형의 data를 텍스트 화일로 출력하되, 0D 0A(#13 #10)가 들어가지 말아야합니다.
답변 부탁합니다.
type
Trec = record
rec1 : array[1..2] of char;
rec2 : array[1..5] of char;
rec3 : array[1..5] of char;
end;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Test : ^Trec;
MyFile : TStringList;
s : String;
begin
MyFile := TStringList.Create;
s := 'aabbbbbccccc';
Test := @s[1];
{ ShowMessage(Test^.rec1);}
{ ShowMessage(Test.rec2); }
SetLength(s, SizeOf(Test));
Move(Test, S[1], SizeOf(Test));
MyFile.Add(s);
MyFile.SaveToFile('MyText1.txt');
MyFile.Free;
end;
일단 메모리 스트림에 아래와 같은 레코드를 저장한다음에
메모리 스트림에 있는 내용을 파일스트림을 이용해 파일로 저장하면 되겠쪄...
간단한 예제 첨부 합니다. 예제는 파일로 저장하는 형태이기 때문에 파일 자체를
메모장으로 열어서 데이터를 확인 할 수는 없습니다.
예제를 직접입력하다 보니 오류가 있을수 있습니다. 이점 참고 하세여....^^
type
PTrec = ^Trec;
Trec = record
rec1 : array[1..2] of char;
rec2 : array[1..5] of char;
rec3 : array[1..5] of char;
end;
function WriteData(Value: TRec): TMemoryStream;
var
MyRec: PTrec;
dummy: Integer;
MemoryStream: TMemoryStream;
begin
MyRec := @Value;
dummy := Sizeof(MyRec^.rec1);
MemoryStream.Write(dummy, Sizeof(Integer));
MemoryStream.Write(MyRec^.rec1, dummy);
dummy := Sizeof(MyRec^.rec2);
MemoryStream.Write(dummy, Sizeof(Integer));
MemoryStream.Write(MyRec^.rec2, dummy);
dummy := Sizeof(MyRec^.rec3);
MemoryStream.Write(dummy, Sizeof(Integer));
MemoryStream.Write(MyRec^.rec3, dummy);
Result := MemoryStream;
end;
function ReadData(Stream: TStream): Trec;
var
ReadLength: Integer;
MyRec: TRec;
begin
Stream.Read(ReadLength, Sizeof(Integer));
SetString(MyRec.rec1, PChar(nil), ReadLength);
Stream.Read(MyRec.rec1, ReadLength);
Stream.Read(ReadLength, Sizeof(Integer));
SetString(MyRec.rec2, PChar(nil), ReadLength);
Stream.Read(MyRec.rec2, ReadLength);
Stream.Read(ReadLength, Sizeof(Integer));
SetString(MyRec.rec3, PChar(nil), ReadLength);
Stream.Read(MyRec.rec3, ReadLength);
Result := MyRec;
end;
procedure SaveData(MemoryStream: TMemoryStream);
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create('MyText1.txt', fmCreate);
FileStream.CopyFrom(MemoryStream, MemoryStream.Size);
FileStream.Free;
end;
function LoadData(FileName: TFileName): TRec;
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FileName, fmOpenRead);
Result := ReadData(TSream(FileStream));
FileStream.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyRec, ViewRec: TRec;
MemoryStream: TMemoryStream;
begin
// MyRec에 데이터를 입력한 후에 파일로 저장한다.
SaveData(WriteData(MyRec));
// 파일로 저장한 후에 데이터를 파일로부터 로드한다.
ViewRec := LoadData('MyText1.txt');
Showmessage(PChar(@ViewRec.rec1));
end;
만약 텍스트 파일로만 하길 원하신다면 텍스트파일 처리에 대해 참고 하세요..
var
t: TextFile;
begin
AssignFile(t, 'MyText1.txt');
Rewrite(t);
WriteLn(t, MyRec.rec1);
WriteLn(t, MyRec.rec2);
WriteLn(t, MyRec.rec3);
CloseFile(t);
김아성 wrote:
> 아래와 같이 소스를 만들어서 실행을 했는데..
> 잘안되네요 ㅜ.ㅜ
> 제가 무엇을 잘못한거죠? 이상한 문자만 저장이 됩니다.
>
> 그리고 마지막에 0D 0A(#13 #10)이 들어가는데,
> 이것이 들어가면 안되거든요
>
> 레코드 형의 data를 텍스트 화일로 출력하되, 0D 0A(#13 #10)가 들어가지 말아야합니다.
>
> 답변 부탁합니다.
>
>
> type
> Trec = record
> rec1 : array[1..2] of char;
> rec2 : array[1..5] of char;
> rec3 : array[1..5] of char;
> end;
> {$R *.DFM}
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> Test : ^Trec;
> MyFile : TStringList;
> s : String;
> begin
> MyFile := TStringList.Create;
> s := 'aabbbbbccccc';
> Test := @s[1];
> { ShowMessage(Test^.rec1);}
> { ShowMessage(Test.rec2); }
>
> SetLength(s, SizeOf(Test));
> Move(Test, S[1], SizeOf(Test));
>
> MyFile.Add(s);
> MyFile.SaveToFile('MyText1.txt');
> MyFile.Free;
> end;