본문 바로가기
SAS/SAS 함수

【SAS 함수】 44. CALL POKE 함수

by 기서무나구물 2018. 11. 20.

포스팅 목차

    44. CALL POKE

     


    32비트 플랫폼에서 값을 메모리에 직접 작성한다.

    Category: Special

     

    MAIN

    문 법


    CALL POKE
     (source,pointer<,length>); 

     

    Arguments

    source

     

         는 메모리에 쓰기 위해 값을 가진 SAS 표현을 지정.

     

    pointer

     

         는 메모리 주소를 지정.

     

    length

     

         는 byte수를 지정.

     


    참 고

    단, 메모리에 직접 쓰는 것은 상당히 조심할 필요있습니다.
     


    관련 함수

    함수명 함수내용
    ADDR 32비트 프랫폼에서 메모리 주소를 숫자 변수로써 반환한다.
    ADDRLONG 32비트와 64비트 프랫폼에서 해당 변수의 메모리 주소를 문자변수로 반환한다.
    CALL POKE 32비트 플랫폼에서 값을 메모리에 직접 작성한다.
    CALL POKELONG 32bit와 64bit 플래폼 메모리에 직접 값을 작성한다.
    PEEK 32비트 platform에서 숫자변수의 메모리 주소의 항목(내용)을 저장한다.
    PEEKC 메모리에서 문자변수에 대한 지정한 위치(주소)에 저장된 데이터를 Access한다.
    PEEKLONG 32비트와 64비트 platforms에서 숫자 변수에 대한 메모리의 데이터를 Access한다.
    PEEKCLONG 32비트와 64비트 platforms에서 문자 변수에 대한 메모리의 데이터를 Access한다.
    PTRLONGADD 32비트나 64비트에서 포인터 주소를 문자변수로 반환한다.

     


    예 제

     

    예 제 1 :

    변수 C1의 값(4)을 메모리에서 접근하여 취한후에, 그 값을 메모리 주소 addr(배열의 해당변수,즉 x8에서 x1까지)에 length 8(c1의 8자리를 가져옮)로 직접 기록한다.

     * peekc : 메모리에서 지정한 위치(주소)에 저장된 데이터를 Access한다. 

    SAS Statements
    data CALL_POKE;
          c1 = 4;
          array x(8);
          length b $8.;
          do addr = addr(x8) to addr(x1) by -8;
             put addr=;
             a = addr(c1);
             put a=;
             b = peekc(addr(c1),8);
             put b=;
    
             call poke(peekc(addr(c1),8),addr);
          end;
          put / _all_;
    run;

     

    Results
     c1=4 x1=4 x2=4 x3=4 x4=4 x5=4 x6=4 x7=4 x8=4
    b=    @ addr=108630552 a=108630624

     


    예 제 2 :

    string변수의 값을 v(1)의 메모리 위치에서 부터 length가 10까지의 메모리 위치까지 쓴다. 이미 각 배열의 length를 1로 선언하였으므로 각 변수(v1-v10)은 STRING변수에서 각 1 length 의 값을 가지게 된다.

    SAS Statements
    data in;
         string = '1234567890';
    run;
    
    data CALL_POKE2;
         array v(10) $1;
         addr = addr(v(1));
         len = dim(v);
         do until (eof);
            set in end=eof;
            call poke (string, addr, len);
            output;
         end;
    run;

     

    Results
    v1 v2 v3 v4 v5 v6 v7 v8 v9 v10   addr     len   string
     1  2   3  4   5  6  7   8  9    0 108629368   10  1234567890

     


    SAS 함수(SAS Function) 리스트 링크

     

    엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크

     

    SAS 데이터 스텝 구문 리스트(SAS Data Step Statement)
    반응형

    댓글