Q&A

  • 레코드 형의 data를 .TXT 화일로 출력하는 방법좀 알려주세요
아래와 같이 소스를 만들어서 실행을 했는데..

잘안되네요 ㅜ.ㅜ

제가 무엇을 잘못한거죠? 이상한 문자만 저장이 됩니다.



그리고 마지막에 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;

2  COMMENTS
  • Profile
    바다를향해 2001.05.22 02:42
    파일스트림을 쓰세여.........

    일단 메모리 스트림에 아래와 같은 레코드를 저장한다음에

    메모리 스트림에 있는 내용을 파일스트림을 이용해 파일로 저장하면 되겠쪄...

    간단한 예제 첨부 합니다. 예제는 파일로 저장하는 형태이기 때문에 파일 자체를

    메모장으로 열어서 데이터를 확인 할 수는 없습니다.



    예제를 직접입력하다 보니 오류가 있을수 있습니다. 이점 참고 하세여....^^



    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;

  • Profile
    Warlord 2001.05.22 00:33


    TStringList의 SaveToFile Method를 쓰지 마시구여...



    직접 파일로 쓰는 루틴을 작성하시는 것이 좋을 듯 하네여...



    구럼....