Q&A

  • 부탁드립니다. 레코드에 관한 질문입니다...
질문이 좀 이상했나봅니다.

아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

부탁드립니다.

밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...



----------------------------------------------------------

c 에서의 예를 들면...



#include

main()

{

char *amt;



struct tmp { char aa [2];

char bb [5];

char cc [5];

} tt;



amt = "aabbbbbccccc";



memset(&tt, ' ', sizeof(tt));

memcpy(&tt, amt, 13);



printf("[%s]n", &tt);

printf("[%.2s]n", tt.aa);

printf("[%.5s]n", tt.bb);

printf("[%.5s]n", tt.cc);

}

이렇게 하면 자료가 잘 들어가는데요.



----------------------------------------------------------

델파이에서는...



type

TRec = record

rec1: string[2];

rec2: string[5];

rec3: string[5];

end;

으로 선언하고

procedure TForm1.Button1Click(Sender: TObject);

var

Test: ^TRec;

s : string;

begin

s := 'aabbbbbccccc';

Test := @s;

ShowMessage(Test^.rec1);

end;

이렇게 하면 이상한 값이 나옵니다.



Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

물론 사용시에는

Test.rec1에는 aa 가

Test.rec2에는 bbbbb 가 들어있어야하구요.

----------------------------------------------------------

부탁드립니다...



6  COMMENTS
  • Profile
    매일웃자 2001.01.29 19:16
    매일웃자 wrote:

    > 질문이 좀 이상했나봅니다.

    > 아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

    > 일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

    > 부탁드립니다.

    > 밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...

    >

    > ----------------------------------------------------------

    > c 에서의 예를 들면...

    >

    > #include

    > main()

    > {

    > char *amt;

    >

    > struct tmp { char aa [2];

    > char bb [5];

    > char cc [5];

    > } tt;

    >

    > amt = "aabbbbbccccc";

    >

    > memset(&tt, ' ', sizeof(tt));

    > memcpy(&tt, amt, 13);

    >

    > printf("[%s]n", &tt);

    > printf("[%.2s]n", tt.aa);

    > printf("[%.5s]n", tt.bb);

    > printf("[%.5s]n", tt.cc);

    > }

    > 이렇게 하면 자료가 잘 들어가는데요.

    >

    > ----------------------------------------------------------

    > 델파이에서는...

    >

    > type

    > TRec = record

    > rec1: string[2];

    > rec2: string[5];

    > rec3: string[5];

    > end;

    > 으로 선언하고

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > Test: ^TRec;

    > s : string;

    > begin

    > s := 'aabbbbbccccc';

    > Test := @s;

    > ShowMessage(Test^.rec1);

    > end;

    > 이렇게 하면 이상한 값이 나옵니다.

    >

    > Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

    > Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

    > 물론 사용시에는

    > Test.rec1에는 aa 가

    > Test.rec2에는 bbbbb 가 들어있어야하구요.

    > ----------------------------------------------------------

    > 부탁드립니다...

    >

  • Profile
    몰러 2001.01.28 06:19
    파일로부터 레코드를 읽기 위한 것도 아니고 단순히 한줄의 코드를 덜 적기 위한 것으로밖에 보이지 않는데 굳이 그렇게 해야 할 필요가 있는지 모르겠네요..



    그냥 StringToTRec라고 하여 아래와 같이 함수하나를 만들면 될것을..



    procedure StringToTRec(s:string; aRec:TRec);

    begin

    aRec.rec1 := Copy(s,1,2);

    aRec.rec2 := Copy(s,3,5);

    aRec.rec3 := Copy(s,8,5);

    end;







    매일웃자 wrote:

    > 질문이 좀 이상했나봅니다.

    > 아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

    > 일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

    > 부탁드립니다.

    > 밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...

    >

    > ----------------------------------------------------------

    > c 에서의 예를 들면...

    >

    > #include

    > main()

    > {

    > char *amt;

    >

    > struct tmp { char aa [2];

    > char bb [5];

    > char cc [5];

    > } tt;

    >

    > amt = "aabbbbbccccc";

    >

    > memset(&tt, ' ', sizeof(tt));

    > memcpy(&tt, amt, 13);

    >

    > printf("[%s]n", &tt);

    > printf("[%.2s]n", tt.aa);

    > printf("[%.5s]n", tt.bb);

    > printf("[%.5s]n", tt.cc);

    > }

    > 이렇게 하면 자료가 잘 들어가는데요.

    >

    > ----------------------------------------------------------

    > 델파이에서는...

    >

    > type

    > TRec = record

    > rec1: string[2];

    > rec2: string[5];

    > rec3: string[5];

    > end;

    > 으로 선언하고

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > Test: ^TRec;

    > s : string;

    > begin

    > s := 'aabbbbbccccc';

    > Test := @s;

    > ShowMessage(Test^.rec1);

    > end;

    > 이렇게 하면 이상한 값이 나옵니다.

    >

    > Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

    > Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

    > 물론 사용시에는

    > Test.rec1에는 aa 가

    > Test.rec2에는 bbbbb 가 들어있어야하구요.

    > ----------------------------------------------------------

    > 부탁드립니다...

    >

  • Profile
    매일웃자 2001.01.29 19:07
    몰러 wrote:

    > 파일로부터 레코드를 읽기 위한 것도 아니고 단순히 한줄의 코드를 덜 적기 위한 것으로밖에 보이지 않는데 굳이 그렇게 해야 할 필요가 있는지 모르겠네요..

    >

    > 그냥 StringToTRec라고 하여 아래와 같이 함수하나를 만들면 될것을..

    >

    > procedure StringToTRec(s:string; aRec:TRec);

    > begin

    > aRec.rec1 := Copy(s,1,2);

    > aRec.rec2 := Copy(s,3,5);

    > aRec.rec3 := Copy(s,8,5);

    > end;

    >

    >

    >

    > 매일웃자 wrote:

    > > 질문이 좀 이상했나봅니다.

    > > 아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

    > > 일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

    > > 부탁드립니다.

    > > 밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...

    > >

    > > ----------------------------------------------------------

    > > c 에서의 예를 들면...

    > >

    > > #include

    > > main()

    > > {

    > > char *amt;

    > >

    > > struct tmp { char aa [2];

    > > char bb [5];

    > > char cc [5];

    > > } tt;

    > >

    > > amt = "aabbbbbccccc";

    > >

    > > memset(&tt, ' ', sizeof(tt));

    > > memcpy(&tt, amt, 13);

    > >

    > > printf("[%s]n", &tt);

    > > printf("[%.2s]n", tt.aa);

    > > printf("[%.5s]n", tt.bb);

    > > printf("[%.5s]n", tt.cc);

    > > }

    > > 이렇게 하면 자료가 잘 들어가는데요.

    > >

    > > ----------------------------------------------------------

    > > 델파이에서는...

    > >

    > > type

    > > TRec = record

    > > rec1: string[2];

    > > rec2: string[5];

    > > rec3: string[5];

    > > end;

    > > 으로 선언하고

    > > procedure TForm1.Button1Click(Sender: TObject);

    > > var

    > > Test: ^TRec;

    > > s : string;

    > > begin

    > > s := 'aabbbbbccccc';

    > > Test := @s;

    > > ShowMessage(Test^.rec1);

    > > end;

    > > 이렇게 하면 이상한 값이 나옵니다.

    > >

    > > Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

    > > Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

    > > 물론 사용시에는

    > > Test.rec1에는 aa 가

    > > Test.rec2에는 bbbbb 가 들어있어야하구요.

    > > ----------------------------------------------------------

    > > 부탁드립니다...

    > >

  • Profile
    김광섭 2001.01.27 23:22
    매일웃자 wrote:

    > 질문이 좀 이상했나봅니다.

    > 아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

    > 일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

    > 부탁드립니다.

    > 밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...

    >

    > ----------------------------------------------------------

    > c 에서의 예를 들면...

    >

    > #include

    > main()

    > {

    > char *amt;

    >

    > struct tmp { char aa [2];

    > char bb [5];

    > char cc [5];

    > } tt;

    >

    > amt = "aabbbbbccccc";

    >

    > memset(&tt, ' ', sizeof(tt));

    > memcpy(&tt, amt, 13);

    >

    > printf("[%s]n", &tt);

    > printf("[%.2s]n", tt.aa);

    > printf("[%.5s]n", tt.bb);

    > printf("[%.5s]n", tt.cc);

    > }

    > 이렇게 하면 자료가 잘 들어가는데요.

    >

    > ----------------------------------------------------------

    > 델파이에서는...

    >

    > type

    > TRec = record

    > rec1: string[2];

    > rec2: string[5];

    > rec3: string[5];

    > end;

    > 으로 선언하고

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > Test: ^TRec;

    > s : string;

    > begin

    > s := 'aabbbbbccccc';

    > Test := @s;

    > ShowMessage(Test^.rec1);

    > end;

    > 이렇게 하면 이상한 값이 나옵니다.

    >

    > Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

    > Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

    > 물론 사용시에는

    > Test.rec1에는 aa 가

    > Test.rec2에는 bbbbb 가 들어있어야하구요.

    > ----------------------------------------------------------

    > 부탁드립니다...

    >

    방법이 조금 다르긴 하지만...

    스트링자체가 배열로 저장 되니깐여.

    s := 'aabbbbbccccc';

    s[1]+s[2] ==> aa

    s[3]+s[4]+s[5]+ s[6]+ s[7] ==> bbbbb

    s[8]+s[9]+s[10]+s[11]+s[12] ==> ccccc

  • Profile
    이만준 2001.01.27 21:55


    안녕하세요...



    델파이의 문자열과 C에서 사용하는 문자열은 다릅니다...

    스트링에 대한 설명은 팁 페이지에 가면 있을겁니다...



    type

    TRec = record

    rec1: array[1..2] of char;

    rec2: array[1..5] of char;

    rec3: array[1..5] of char;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    Test: ^TRec;

    s : string;

    begin

    s := 'aabbbbbccccc';

    Test := @s[1];

    ShowMessage(Test^.rec1);

    end;



    기럼..







    매일웃자 wrote:

    > 질문이 좀 이상했나봅니다.

    > 아무도 답을 안해주셔서 이렇게 다시한번 질문 올립니다.

    > 일정한 크기로 서버에서 날라오는 데이터를 뿌려야 되거든요.

    > 부탁드립니다.

    > 밑에 드린 질문에 덧붙여 c 와 비교해서 질문을 드리면...

    >

    > ----------------------------------------------------------

    > c 에서의 예를 들면...

    >

    > #include

    > main()

    > {

    > char *amt;

    >

    > struct tmp { char aa [2];

    > char bb [5];

    > char cc [5];

    > } tt;

    >

    > amt = "aabbbbbccccc";

    >

    > memset(&tt, ' ', sizeof(tt));

    > memcpy(&tt, amt, 13);

    >

    > printf("[%s]n", &tt);

    > printf("[%.2s]n", tt.aa);

    > printf("[%.5s]n", tt.bb);

    > printf("[%.5s]n", tt.cc);

    > }

    > 이렇게 하면 자료가 잘 들어가는데요.

    >

    > ----------------------------------------------------------

    > 델파이에서는...

    >

    > type

    > TRec = record

    > rec1: string[2];

    > rec2: string[5];

    > rec3: string[5];

    > end;

    > 으로 선언하고

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > Test: ^TRec;

    > s : string;

    > begin

    > s := 'aabbbbbccccc';

    > Test := @s;

    > ShowMessage(Test^.rec1);

    > end;

    > 이렇게 하면 이상한 값이 나옵니다.

    >

    > Test.rec1 과 Test.rec2,rec3에 각각 aa, bbbbb, ccccc를 넣지 않고

    > Test 변수에 한꺼번에 aabbbbbccccc를 넣을수는 없나요?

    > 물론 사용시에는

    > Test.rec1에는 aa 가

    > Test.rec2에는 bbbbb 가 들어있어야하구요.

    > ----------------------------------------------------------

    > 부탁드립니다...

    >

  • Profile
    왕초 2001.01.27 21:22
    님께서 정확하게 어떤 걸 구현할려고 하는지 모르겠지만



    저두 예전에 님과 비슷한 걸 구현할려구 했던적이 있습니다...



    그땐 답을 찾지 못하구 아래와 같은 방법으로 구현했던 기억이 납니다...



    지금 1시간 째 저두 열심히 여기저기 찾아가며



    답을 찾아보려고 노력중인데 잘돼지 않는 군요...



    역시 이상한 문자값만 나오는 군요... 쩝...



    님아 답찾으시면 제게두 멜점 부탁할께요...





    procedure TForm1.Button1Click(Sender: TObject);

    type

    PRec = ^TRec;

    TRec = record

    rec1: string[2];

    rec2: string[5];

    rec3: string[5];

    end;

    var

    Test : PRec;

    Test1 : TRec;

    s : string;

    begin

    s := 'aabbbbbccccc';

    Test1.Rec1 := Copy(s, 1, 2);

    Test1.Rec2 := Copy(s, 3, 5);

    Test1.Rec3 := Copy(s, 8, 5);

    ShowMessage(Test1.Rec1);

    ShowMessage(Test1.Rec2);

    ShowMessage(Test1.Rec3);

    //ShowMessage(Test^.Rec1);

    end;