Q&A

  • ____ String 배열 ____ 이동/복사 Move, CopyMemory ??
스트링 배열에서 이동이라고 해야하나...

배열에서 하나씩 밀고 당기고 하고 싶은데..
배열이 스트링 형이라 그런지 당췌  @!%@%@^@#$

스트링 그리드에서 컬럼이동하였을 경우 변경사항을
해당 배열에 저장하려고 시작했는데...
생각처럼 되질 않네요... 누가좀 알케주세요...
-----------------------------
<!--CodeS-->
var
ary : array [0..9] of string;
fValue : string;
sFrom, sTo, size : integer;
begin
   sFrom := 0;
   sTo := 9;

   size := sTo - sFrom;

   fValue := ary[sFrom];

   CopyMemory(@ary[sFrom], @Channel_Name[sFrom+1], size); <<<< 문제점!!

   ary[sTo] := fValue ;
end;
<!--CodeE-->
--------------------------------------
제가 뭔가를 확실히 모르고 있는거 같은데... 좀 알려주세요.....
2  COMMENTS
  • Profile
    권태훈 2007.02.05 22:03
    string으로 선언한 변수에 포인터형으로 값을 넣으면 에러가 납니다.


    데스티네이션에 값을 넣을수가 없는게 정상입니다.

    왜냐? 스트링을 처리할때 길이나 내용, 복사된값등을 처리하는 방식이 많이 다르다는거죠.

    스트링의 묘미는 팁란에 찾아보시면 재미가 쏠쏠합니다.

    C의 문자열과는 차원이 다름니다.

    그럼 해결은 어떻게 하냐?

    ary[sForm] := Channel_Name[sFrom+1];

    질문자가 원하는건 하나의 문자열에서 앞으로 좀 당기고 밀고 하는 방식을

    하고 싶은가 봅니다..

    위의 식대로 하면 string이라는 문자열이 배열로 생깁니다. (쉽게 말해 2차원 문자열이죠)

    그럼 더 간단하게 어케하냐?

    ary, Channel_name : String;

    으로 선언하고 다음과 같이 복사 합니다.

    ary := copy(Channel_name , sForm+1, Len);

    채널네임이라는 문자열에서 몇바이트부터 워떤길이로 복사해서 ary에 넣겠다라는 뜻이죠.

    채널 네임을 유지할 필요가 없다면.

    delete(Cahnnel_name, 1, 1);

    하면 앞에 한글자 지워집니다.  

    델파이는 가끔 너무 쉬워서 당혹스럽게 할때가 있답니다.

    즐코하세요~

  • Profile
    양승철 2007.02.05 22:46