Hafoom.com

OpenMP 기반의 c++코드임

 

Encription과 Description 을 별도로 수행

 

 

**** OpenMP 컴파일
g++ -o binary_file -fopenmp AES_readfile.cpp
export OMP_NUM_THREADS=8

 

 

 

Encription

 

Code

 

 

 

 

 

 

 

Description

 

Code

'기타' 카테고리의 다른 글

AES Enc와 Dec using OpenMP  (0) 2017.08.16

Comment +0

 

■ Install

 

 

1. SniperSim 홈페이지에서 다운로드 요청하고, 메일로 링크를 받는다.

http://snipersim.org/w/The_Sniper_Multi-Core_Simulator

 

sniper sim link

 

2. Pin을 다운로드 받는다. 안정성이 높은 구버전이 좋겠다.

https://software.intel.com/en-us/articles/pintool-downloads

에서 71313 버전 Linux용 다운로드.

 

Pin을 압축풀고 해당폴더를 pin_kit로 변경하여 SniperSim 안에 넣어두자.

$ mv kit-xxxxx snipersim/pin_kit

 

3. 패스를 맞춰준다.

$ export PIN_HOME=/home/snipersim/pin_kit

 

$ export SNIPER_TARGET_ARCH=ia32  //기본 intel64 로 맞춰져있기에 32로 통일하자.

 

4. Make -j 4 하면, 에러가 뜬다. 필요한 패키지를 알아서 알려준다. 설치한다.

 

*** Please install package zlib1g-dev / zlib-devel
*** Please install package libbz2-dev / bzip2-devel
*** Please install package libboost-dev / boost-devel
*** Please install package libsqlite3-dev / sqlite-devel

 

 

 

 

5. 또 에러가 난다면, 그건 아마 gcc문제일것이다. (구버전 호환이다)

미리 g++-4.4-multilib 등을 다운받고, 아래와같이 친다면 선택가능하다.

 

$apt-get install g++-4.4

$apt-get install g++-4.4-multilib

 

#아래는 안했음

#### sudo apt-get install libc6-dev-i386 g++-4.4-multilib lib32z1-dev

 

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60
                                    --slave /usr/bin/g++ g++ /usr/bin/g++-4.6

 

 

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
                                    --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

 

위에 이미 해놨으면 아래 명령어로 그 때 그 때 선택 가능함.


$ sudo update-alternatives --config gcc

 

 

 

 

■ Benchmark  

http://snipersim.org/w/Download_Benchmarks 에 가서 설명을 보고 다운로드도 받는다.

 

$ wget http://snipersim.org/packages/sniper-benchmarks.tbz

 

cd benchmarks

  • export GRAPHITE_ROOT=/path/to/sniper
  • export BENCHMARKS_ROOT=$(pwd)
  • make
  • ./run-sniper -p splash2-fft -i test -n 4 -c gainestown
  • # or
  • ./run-sniper --benchmarks=splash2-fft-test-4 -c gainestown
  • # or
  • ./run-sniper --benchmarks=splash2-fft-test-1,splash2-fft-test-1,splash2-fft-test-1,splash2-fft-test-1 -c gainestown
  •  

     

     

     

     

     

     

     

     

     

    '시뮬레이터/리눅스' 카테고리의 다른 글

    Sniper Simulator  (0) 2017.06.22
    LEA , ARIA benchmark. compile  (0) 2017.04.19
    parboil benchmark 에러 해결 어케하지  (0) 2017.02.20
    [GPGPU SIM 공부중]  (0) 2016.06.14
    gcc symbolic change  (0) 2016.03.14
    g++ 의존성 문제 해결  (0) 2016.02.16

    Comment +0

    IPSec을 포함하는 packetbench를 컴파일하고자 한다.

     

    일단 다운로드받고 압축을 풀면 ipsec 폴더가 있다.

    가서 arm으로 빌드해보자.

     

    makefile을 열어서 arm gcc를 자신의것에 맞게 설정

    다음 make하면 libpcap이 없단다.

    sudo apt-get install libpcap0.8-dev 를 해보았지만 결국 Makefile에서는 고정된 위치를 지정한다.

     

     

    http://www.tcpdump.org 에 가서 다운로드 받자.

    Libpcap 을 받고나서 압축을 푼다.

     

    들어가서 아래와 같이 입력($ 제외)

    $ CC=arm-linux-gnueabi-gcc-4.7 ac_cv_linux_vers=2 ./configure --host=arm-linux --with-pcap=linux

    $ make

    $ make install

     

    make하믄 내 경로 기준 /home/ipsec/packetbench/libpcap-1.8.1/libpcap.so.1.8.1 이 생성됨.

    make install하믄 뭔가 됨(리눅스에 경로 지정을 해주는듯)

     

    다시 ipsec 벤치마크 경로 가서 Makefile의 경로를 수정해준다.

     

    본인은 libpcap.a 관련 워닝이 좀 뜬다. 링킹이 잘안되어서 나중에 실행했을 때 뭔가 문제가 생길수도 있겠다...

     

     

    이제 실제 시뮬레이터에서 사용은 나중에

    Comment +0

    ARIA, ARIA는 KISA에서 받을 수 있음


    https://seed.kisa.or.kr/iwt/ko/sup/EgovAriaInfo.do;jsessionid=2CFC45CF810ED7DB82062BE49157A9F8



    LEA 다운로드는 

    http://seed.kisa.or.kr/cmm/fms/AtcFileDown.do?type=C&fileSn=3&atchFileId=000000000000779&bbsId=BBSMSTR_000000000002&nttId=88



    '시뮬레이터/리눅스' 카테고리의 다른 글

    Sniper Simulator  (0) 2017.06.22
    LEA , ARIA benchmark. compile  (0) 2017.04.19
    parboil benchmark 에러 해결 어케하지  (0) 2017.02.20
    [GPGPU SIM 공부중]  (0) 2016.06.14
    gcc symbolic change  (0) 2016.03.14
    g++ 의존성 문제 해결  (0) 2016.02.16

    Comment +0

    $ sudo apt-get update $ sudo apt-get install nvidia-352


    일단 다른 드라이브 깔아봄

    -_-;;;;



    '시뮬레이터/리눅스' 카테고리의 다른 글

    Sniper Simulator  (0) 2017.06.22
    LEA , ARIA benchmark. compile  (0) 2017.04.19
    parboil benchmark 에러 해결 어케하지  (0) 2017.02.20
    [GPGPU SIM 공부중]  (0) 2016.06.14
    gcc symbolic change  (0) 2016.03.14
    g++ 의존성 문제 해결  (0) 2016.02.16

    Comment +0

    AREA: Hardware and Architecture
      Rank 1:
           ASPLOS: Architectural Support for Prog Lang and OS
           ISCA: ACM/IEEE Symp on Computer Architecture
           ICCAD: Intl Conf on Computer-Aided Design
           DAC: Design Automation Conf
           MICRO: Intl Symp on Microarchitecture
           HPCA: IEEE Symp on High-Perf Comp Architecture
      Rank 2:
           SUPER: ACM/IEEE Supercomputing Conference
           ICS: Intl Conf on Supercomputing
           ISSCC: IEEE Intl Solid-State Circuits Conf
           HCS: Hot Chips Symp
           VLSI: IEEE Symp VLSI Circuits
      Rank 3:
           ICA3PP:  Algs and Archs for Parall Proc
           EuroMICRO: New Frontiers of Information Technology
           ACS: Australian Supercomputing Conf
      Unranked:
           Advanced Research in VLSI
           International Symposium on System Synthesis
           International Symposium on Computer Design
           International Symposium on Circuits and Systems
           Asia Pacific Design Automation Conference
           International Symposium on Physical Design
           International Conference on VLSI Design



    http://europa.nvc.cs.vt.edu/~ctlu/Link-File/Link-Folder/conference-ranking.txt


    'MicroArchitecture > Hardware & Architecture' 카테고리의 다른 글

    Hardware and Architecture Conference Rank  (0) 2017.02.05

    Comment +0

    Publications

    About me2017.01.17 21:23

     


     

    International Journals


    Dong Oh Son, Gwangbok Kim, Jong Myon Kim, Cheol Hong Kim, "Cache Reuse Aware Replacement Policy for Improving GPU Cache Performance," Lecture Notes in Electrical Engineering, volume 450, pp. 127-133, 2017

     

    Kanghan Oh, Myungeun Lee, Gwangbok Kim, Soohyung Kim, "Detection of multiple salient objects through the integration of estimated foreground clues", Image and Vision Computing, pp.31-44, 2016. (SCI)


    Gwangbok Kim, SooHyung Kim, InSeop Na, "Local Similarity based Document Layout Analysis using Improved ARLSA," International Journal of Contents, Vol.11, No.2, pp. 15-19, June 2015

     

    오강한, 나인섭, 김광복, 김수형, "Text Line Segmentation using AHTC and Watershed Algorithm for Handwritten Document Images, International Journal of Contents, Vol.10, No.10, pp.35-40, 2014 
     



      

    Domestic Journals

     

    김광복, 김종면, 김철홍, "GPU 성능 향상을 위한 MSHR 정보 기반 워프 스케줄링 기법", 한국차세대컴퓨팅학회 논문지 제13권 제3호, pp.72-83, 2017.6

     

    김광복, 김종면, 김철홍, "저전력 1차 명령어 캐쉬를 위한 명령어 흐름 기반 이른 웨이 결정 기법", 한국컴퓨터정보학회 논문지 제21권 제9호, pp.1-9, 2016

     

     



    International Conferences

     

    Gwangbok Kim, Soo-Hyung Kim, and In Seop Na, "'Hybrid Page Segmentation based on Sliding Window using Local Stroke Width Variance," Proc. 2014 International Symposium on Information Technology Convergence, pp. 92-95, Jeongju, Korea, Oct. 2014.

     

    Gwangbok Kim, SooHyung Kim, InSeop Na, Aran Oh, "Performance Evaluation of Binarization Methods for Music Sheet Documents," Proc. Int. Conf. Smart Media and Applications 2013, pp. 467-474, Kota-Kinabalu, Malaysia, Oct. 2013.

     






    Domestic Conferences

     

    김광복,  문민구, 김철홍, "GPU 성능 향상을 위한 접근 재사용 기반 L1 데이터 캐쉬 관리 기법", 한국인터넷정보학회 춘계학술발표대회, 제19권, 1호, pp.335-336, 2018


    김광복, 김철홍, "텍스쳐 데이터를 위한 2차 캐쉬 구조를 가지는 그래픽 처리 장치의 성능 분석", 한국컴퓨터정보학회 동계학술대회 논문집, 25권, 1호, pp.143-144, 2017 

     

    김광복, 김철홍, "MSHR 변화에 따른 그래픽 처리 장치 성능 분석", 한국통신학회 추계종합학술발표회, pp.234-235, 2016

     

    김광복, 김수형, 나인섭, "악보인식 애플리케이션을 위한 MusicXML 기반 사용자 인터페이스 설계," 2014년도 한국멀티미디어학회 춘계학술발표대회 논문집, 제17권, 제1호, pp. 237-239, 전북대학교, 2014년 5월

     

    김광복, 김수형, 나인섭, "SIFT 키포인트를 이용한 적응적 악보문서 이진화," 한국스마트미디어학회 2013년도 추계학술대회 학술발표논문집, 제2권, 제2호, pp. 52-54, 군산대학교, 2013년 11월

     

    김광복, 김수형, 나인섭, "소벨에지 영역 기반의 연결요소 분석을 이용한 차량 번호판 영역 탐색", 2013 한국정보과학회 추계학술발표회 논문집, pp. 714-716, 제주대학교, 2013년 11월

     

    김광복, 김수형, 나인섭, "숫자에지의 형태학적 특징을 이용한 차량 번호판 검출", 한국스마트미디어학회 2013년도 춘계학술발표 논문집, 제2권 제1호, pp. 50-53, 순천대학교, 2013년 5월




    Update Date : 2018.06.17





    'About me' 카테고리의 다른 글

    Publications  (0) 2017.01.17
    걸어온 길.  (0) 2014.10.26

    Comment +0

     

     

    gpu의 기초!

    실제 구현 기반 설명이 다른곳에 비해 이해하기 쉽게 구성되어있는 듯!

     

    http://slideplayer.com/slide/9139861/

     

     

     

    'MicroArchitecture > GPU' 카테고리의 다른 글

    GPU 기초를 쌓자.  (0) 2016.06.23
    2016.03.18 Memory coalescing, bank, linear addr  (0) 2016.03.18

    Comment +0

     

    사이클 기반 싱글코어 시뮬레이터인 simpleScalar 를 사용할 땐

    캐쉬구조가 어느정도 분리되어있어 수정하기 쉬웠다

     

    GPGPU-SIM같은 경우 MSHR이나 다른 인터페이스를 고려하다보니

    상당히 많은 클래스들을 사용하며 서로 얽혀있어  분석 및 수정하기가 여간 까다롭지 않다.

     

    때문에 한 부분을 고치더라도 GPU 전체구조를 이해하고, 미칠만한 영향 또한 코드를 작성해줘야

    정상적인 시뮬레이션이 가능하다.

     

     

    MEMORY 접근이 gpu연구에서 이슈되는 것이 많기에 이를 먼저 분석하고자 한다.

     

     

     

     

     

     

    GPU_SIM 클래스의 CYCLE() 에서 시작한다

    각 CLUSTER별 CORE_CYCLE()을 호출한다.

     

     

    simt_core_cluster나

    simd_core_cluster였던가

    shader_core_ctx

    클래스 단위로 시작해서

     

     

    많은 캐쉬구조를 다루는 클래스가 존재한다..

     

    막상 블로그에 쓰려니 쓸 말이 없네

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    '시뮬레이터/리눅스' 카테고리의 다른 글

    LEA , ARIA benchmark. compile  (0) 2017.04.19
    parboil benchmark 에러 해결 어케하지  (0) 2017.02.20
    [GPGPU SIM 공부중]  (0) 2016.06.14
    gcc symbolic change  (0) 2016.03.14
    g++ 의존성 문제 해결  (0) 2016.02.16
    리눅스 멀티부팅 에러...해결...  (0) 2015.11.06

    Comment +0

    좋은 정보가 정리되어있어서 가져옴...

    출처는

     

    [출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

     

    [출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

     

    [출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

     

    [출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

     

     

     

    CString 을 일반적으로 사용한다던지 또는 DEBUG로 사용할 때는 보통 별 문제 없이 사용이 된다.
    하지만, 파일을 Read()하는 것 처럼 큰 데이터를 사용하려 할 때는 아래와 같이 정확히 원하는 만큼의 버퍼를 잡아주고, 사용이 끝나고 난 후에는 버퍼를 해제해 주어야 에러없이 잘 동작한다..
    주의하자..!!!!
    >>> 참고 : 윈도우 프로그래밍 플러스 : 김은철 저 <<<
    LPTSTR GetBuffer(int nMinBufferLength);
    --- nMinBufLength : C 형태로 사용할 최소 버퍼의 크기. 현재 CString 버퍼보다 크게 설정하면 CString 버퍼가 그 크기만큼 자동으로 재 설정되며, 작게 설정하면 CString 버퍼 크기가 그대로 유지된다. CString 버퍼를 char*로 변환하는 용도로만 사용한다면 0으로 하면되고, CString 버퍼를 직접 접근하여 문자열을 수정하려면, 최대 문자열 길이 +1 해주면 된다.
    --- 반환값 : C 형태로 접근할 수 있는 CString 버퍼의 포인터
    LPTSTR GetBufferSetLength(int nNewLength);
    --- nNewLength : C 형태로 사용할 버퍼 크기. 현재 CString 버퍼크기보다 크게 설정하면 CString 버퍼가 그 크기만큼 자동으로 재 설정되며, 작게 설정하면 버퍼의 크기는 CString 버퍼크기가 그대로 유지되지만 문자열은 그 크기만 남고 잘려 나간다. CString 버퍼의 char*를 얻으면서 지정된 크기만큼의 문자열만 사용할 때 유용하다.
    --- 반환값 : C 형태로 접근할 수 있는 CString 버퍼의 포인터
    void ReleaseBuffer(int nNewLength = -1);

    사용된 메모리 할당 해제 ->GetBuffer()와 함께 사용
    --- nNewLength : 보통 생략. CString 버퍼의 char*를 사용하여 문자열을 수정한 경우 현재 버퍼의 크기를 정확하게 입력해야 한다.
    UINT Read(void* lpBuf, UINT nCount);
    --- 개방된 파일에서 64K 미만의 텍스트 또는 바이너리를 읽을때 사용
    --- 반환값 : 실제 읽혀진 바이트 수
    UINT ReadHuge(void* lpBuf, UINT nCount);
    --- 개방된 파일에서 64K 이상의 텍스트 또는 바이너리를 읽을때 사용
    --- 반환값 : 실제 읽혀진 바이트 수
    *** Read, ReadHuge는 텍스트형이나 바이너리형 모두 읽을 수 있다.
    *** Read 함수를 상속 받은 클래스에서 파일을 텍스트 모드로 사용시 ("\r\n")은 자동으로 개행문자("\n")로 변환된다
    void Write(void* lpBuf, UINT nCount);
    --- Read와 반대
    void WriteHuge(void* lpBuf, UINT nCount);
    --- ReadHuge와 반대

    예1 ) GetBuffer, ReleaseBuffer
    char* p;
    CString str("12345");
    p = str.GetBuffer(0); //str문자열 크기만큼 자동할당
    ....
    str.ReleaseBuffer(); //사용해제

    예2 ) GetBufferSetLength, ReleaseBuffer
    char* p;
    p = str.GetBufferSetLength(3); //3바이트 만큼 할당
    ...
    str.ReleaseBuffer(); //사용해제

    파일읽기 사용예3 )
    DWORD dwLength = tesfile.GetLength();
    dwLength = tesfile.ReadHuge(strOldData.GetBufferSetLength(dwLength), dwLength);
    strOldData.GetBufferSetLength(dwLength);
    strOldData.ReleaseBuffer();
    tesfile.Close();

    ============================================================================

     

    [CString관련 함수]

     

    함 수

    기 능

    Length

    문자열 길이 변환

    Trim

    문자열 앞 뒤의 공백을 삭제

    TrimLeft

    문자열의 왼쪽 공백을 삭제

    TrimRight

    문자열의 오른쪽 공백을 삭제

    UpperCase

    문자열 데이터를 대문자로 변환

    LowerCase

    문자열 데이터를 소문자로 변환

    StrReverse

    뒤바뀌어진 문자열을 반환

    NumericText

    문자열이 숫자이면 True 값 반환

    ToNumber

    문자열을 숫자로 변환

    ToText

    숫자를 문자열로 변환

    ToWords

    숫자를 단어로 변환

    ReplicateString

    인수로 지정한 값만큼 반복 프린트

    Space

    인수로 지정한 값만큼 공백문자 출력

    Instr

    문자열에서 다른 문자열의 위치를 반환

    InstrRev

    문자열에서 다른 문자열의 위치를 반대로 반환

    StrCmp

    문자열을 비교해서 결과값을 반환

    Mid

    문자열에서 지정한 만큼 문자열을 반환

    Left

    문자열의 좌측으로부터 지정된 수의 문자를 반환

    Right

    문자열의 우측으로부터 지정된 수의 문자를 반환

    Val

    문자값을 수치로 변환

    Chr

    아스키 값에 해당하는 문자 출력

    Asc

    지정한 문자의 아스키 값을 반환

    Filter

    Replace

    Join

    Split

     

    함 수

    기 능

    Length

    문자열 길이 변환

    Trim

    문자열 앞 뒤의 공백을 삭제

    TrimLeft

    문자열의 왼쪽 공백을 삭제

    TrimRight

    문자열의 오른쪽 공백을 삭제

    UpperCase

    문자열 데이터를 대문자로 변환

    LowerCase

    문자열 데이터를 소문자로 변환

    StrReverse

    뒤바뀌어진 문자열을 반환

    NumericText

    문자열이 숫자이면 True 값 반환

    ToNumber

    문자열을 숫자로 변환

    ToText

    숫자를 문자열로 변환

    ToWords

    숫자를 단어로 변환

    ReplicateString

    인수로 지정한 값만큼 반복 프린트

    Space

    인수로 지정한 값만큼 공백문자 출력

    Instr

    문자열에서 다른 문자열의 위치를 반환

    InstrRev

    문자열에서 다른 문자열의 위치를 반대로 반환

    StrCmp

    문자열을 비교해서 결과값을 반환

    Mid

    문자열에서 지정한 만큼 문자열을 반환

    Left

    문자열의 좌측으로부터 지정된 수의 문자를 반환

    Right

    문자열의 우측으로부터 지정된 수의 문자를 반환

    Val

    문자값을 수치로 변환

    Chr

    아스키 값에 해당하는 문자 출력

    Asc

    지정한 문자의 아스키 값을 반환

    Filter

    Replace

    Join

    Split

     

    함 수

    기 능

    Length

    문자열 길이 변환

    Trim

    문자열 앞 뒤의 공백을 삭제

    TrimLeft

    문자열의 왼쪽 공백을 삭제

    TrimRight

    문자열의 오른쪽 공백을 삭제

    UpperCase

    문자열 데이터를 대문자로 변환

    LowerCase

    문자열 데이터를 소문자로 변환

    StrReverse

    뒤바뀌어진 문자열을 반환

    NumericText

    문자열이 숫자이면 True 값 반환

    ToNumber

    문자열을 숫자로 변환

    ToText

    숫자를 문자열로 변환

    ToWords

    숫자를 단어로 변환

    ReplicateString

    인수로 지정한 값만큼 반복 프린트

    Space

    인수로 지정한 값만큼 공백문자 출력

    Instr

    문자열에서 다른 문자열의 위치를 반환

    InstrRev

    문자열에서 다른 문자열의 위치를 반대로 반환

    StrCmp

    문자열을 비교해서 결과값을 반환

    Mid

    문자열에서 지정한 만큼 문자열을 반환

    Left

    문자열의 좌측으로부터 지정된 수의 문자를 반환

    Right

    문자열의 우측으로부터 지정된 수의 문자를 반환

    Val

    문자값을 수치로 변환

    Chr

    아스키 값에 해당하는 문자 출력

    Asc

    지정한 문자의 아스키 값을 반환

    Filter

    Replace

    Join

    Split

     

    ex.CString a=Mid("miae",2)  a=>ae

    a=Mid("miae",2,1) a=>a

     

    CString a= "ppp.html";

    Mid(a.ReverseFind('.')+1)   ==>  html

     

     

     

    Find()

    int Find( TCHAR ch ) const;

    찾을 문자열을 인자로 전달받아 찾은 문자열의 위치정보를 int형의 값으로 리턴합니다

    CString str = "abcde";

    int n = str.Find('c'); // 요 경우는 2를 리턴합니다(문자열의 첫위치는0)

    없는 문자열 'z'를 찾고자 할때는 음수값 -1을 리턴합니다

     

     

    ReverseFind(x)

     

    int ReverseFind( TCHAR ch ) const;

    뒤에서 ch 문자를 찾아서 그 자리를 넘긴다.

    CString s( "abcabc" );
    int a = s.ReverseFind('b') =>  a=4가 된다.

    두번째 a를 찾고자 할때는 다음과 같이 정의할 수 있습니다.

     

    n = str.Find('a', 3); // 3의 위치는 d가 되므로 d의 위치부터 탐색을 시작하게 됩니다.

    n = str.Find('a', str.Find('a',) + 1);

    =>명확히 알 수 없는 경우,

     

     

    Length(x)

    x는 텍스트 문자열이거나 텍스트 문자열을 가진 필드입니다.

    동작

    텍스트 문자열이나 문자 데이터 필드의 길이를 반환합니다. 텍스트 문자열의 길이에 의한 조작, 비교, 계산 등에 사용됩니다.

    예제

    다음 수식에서 Account 문자열의 개수인 7이 반환됩니다.

    Length("Account") = 7

    다음 수식은 {table.개수} 필드의 값이 14233.08일 때입니다. ToText 함수로 수치를 문자열로 바꾼 다음에 계산하게 됩니다.

    Length(ToText({table.개수})) = 8

    숫자를 문자로 변환시키는 ToText 함수는 쉼표(또는 천단위 구분자)를 텍스트로 변환하지 않습니다. 숫자 14233.08은 "14233.08"이라는 문자열로 변환되어 문자 길이는 8이 됩니다.

    Length("SMITH") = 5

    다음 수식에서 BOB와 SMITH 사이의 공백도 문자로 세어집니다.

    Length("BOB SMITH") = 9

    Trim(x)

    x는 문자열입니다.

    동작

    Trim은 문자열 앞, 뒤의 공백을 제거합니다.

    TrimLeft(x)

    x는 문자열이거나 오른쪽으로 정렬되어 저장된 데이터 필드입니다.

    동작

    TrimLeft는 문자열이나 데이터베이스에 오른쪽으로 정렬된 문자열로 저장된 데이터 필드 왼쪽의 모든 공백을 제거합니다.

    예제

    텍스트 문자열의 정렬, 문자 횟수, 또는 계산(만일 문자열이 결국 숫자로 변환된다면)을 방해하는 선행 공백이 있을 때 이 함수를 사용합니다.

    TrimLeft(" Al/4520/B12") = "A1/4520/B12"

    TrimRight(x)

    x는 문자열이거나 오른쪽으로 정렬되어 저장된 데이터 필드.

    동작

    TrimRight는 문자열이나 데이터베이스에 왼쪽으로 정렬된 문자열로 저장된 데이터 필드의 오른쪽의 모든 공백을 제거합니다.

    예제

    텍스트 문자열의 정렬, 문자 횟수, 또는 계산(만일 문자열이 결국 숫자로 변환된다면)을 방해하는 후 행 공백이 있을 때 이 함수를 사용합니다.

    TrimRight("Al/4520/B12 ") = "A1/4520/B12"

    TrimRight({table.Reference}) = "Bal Fwd."

    UpperCase(x)

    x는 대문자로 변환하길 원하는 텍스트 문자열입니다.

    동작

    UpperCase는 텍스트 문자열을 대문자로 바꾸어줍니다. 대문자와 소문자로 이루어진 문자열에서 모든 문자를 대문자로 변환할 수 있습니다.

    예제

    UpperCase("Description") = "DESCRIPTION"

    UpperCase("abc12345") = "ABC12345"

    UpperCase("mr " + "bUtler" ) = "MR BUTLER"

    LowerCase(x)

    x는 데이터 필드에 있는 텍스트 값이거나 텍스트 문자열입니다.

    동작

    LowerCase는 소문자로 문자 데이터 필드나 텍스트 문자열을 소문자로 변환합니다. 이 함수는 필드가 대문자와 소문자 둘 다 포함하고 있고 일관성을 위해 모든 값을 소문자로 변환하고자 할 때입니다. 문자열 안의 숫자는 LowerCase 함수에 의해 영향을 받지 않습니다.

    예제

    LowerCase("Description") = "description"

    LowerCase("BrEaD " + "AND " + "bUtTeR") = "bread and butter"

    StrReverse(InputString)

    동작

    예제

    NumericText(x)

    x는 텍스트로 저장된 숫자를 포함하고 있는지를 검사하고자 하는 텍스트 필드입니다.

    동작

    NumericText는 텍스트 필드의 내용이 숫자인지를 검사합니다.

    만일 필드의 전체 내용이 숫자이거나 subscript 연산자를 통해 추출된 문자가 전부 숫자이면 식은 YES 값을 반환합니다. 만일 필드 내용이나 추출된 문자의 일부가 숫자가 아니면 식은 값 NO를 반환합니다.

    예제

    만일 숫자가 저장된 텍스트 필드를 ToNumber를 사용하여 변환하기에 적당한 지를 확인하기 위해 NumericText를 사용할 수 있습니다.

    If NumericText({table.고객코드}) = YES Then

    ToNumber{table.고객코드}

    ToNumber(x)

    x는 텍스트 문자열로 저장된 숫자입니다

    동작

    ToNumber는 텍스트 문자열을 숫자로 변환합니다.

    데이터베이스에서 어떤 숫자는 수치 필드에 숫자로 저장되고 어떤 것은 문자 필드에 텍스트로 저장됩니다. 사용자는 처음 데이터베이스를 설정할 때 필드를 숫자로 할 것인지 텍스트로 할 것인지 결정합니다. 사용자가 계산을 수행하게 될 숫자(항목 단가, 주문한 수량 등)는 일반적으로 수치 필드에 저장되고 계산을 수행하지 않을 숫자(고객번호, 전화번호 등)는 일반적으로 텍스트 필드에 저장됩니다.

    예제

    ToNumber는 텍스트로 저장된 숫자를 계산에 사용할 수 있는 숫자로 변환하도록 해줍니다. 예를 들면, 만일 항목 번호가 코드화된 제품 정보를 가지고 있고, 계산에 그 정보를 사용하고 싶을 경우 이 함수를 사용할 수 있습니다.

    ToNumber("123.45") = 123.45

    {table.고객점수} 필드가 문자이고 값이 21385일 때 다음 수식은 True를 반환합니다.

    ToNumber({table.고객점수}) < 33333 = TRUE

    ToText(x) / ToText(x, #places)

    x는 텍스트로 변환되고자 하는 숫자이며 #places는 소수자리의 수를 지정하는 숫자입니다.

    동작

    ToText는 숫자를 텍스트 문자열로 변환합니다.

    텍스트 문자열(폼 문자, 리포트의 주석, 플래그 등)에서 사용될 수 있도록 수치 필드값이나 숫자 계산의 결과를 텍스트로 변환하기 위해 이 함수를 사용할 수 있습니다.

    ToText(x, # places)는 숫자를 텍스트 문자열로 변환하고 텍스트로 쓰여질 때 숫자의 소수자리의 수를 지정하도록 해줍니다.

    예제

    ToText(123.45) = "123.45"

    ToText(12345.6749,2) = "12345.67"

    ToText(12345.6750,2) = "12345.68"

    ToText(12345.5000,0) = "12346"

    ToWords(x) / ToWords(x, n)

    x는 단어로 변환하고자 하는 숫자입니다. (1 = one, 68 = sixtyeight 등)

    n은 결과의 포함된 소수자리의 수입니다.

    동작

    사용자는 텍스트로 사용될 수 있도록 숫자, 통화 필드값이나 숫자 계산의 결과를 단어로 변환하는데 이 함수를 사용합니다.

    음수는 단어 "negative"로 시작합니다.

    예제

    ToWords(12345) = twelve thousand three hundred fortyfive and xx/100

    ToWords(12345,0) = twelve thousand three hundred fortyfive

    ToWords(12.3499) = twelve and 35/100

    ☞ 통화 필드값과 수치 필드값은 같은 방식으로 취급되고 동일한 결과를 산출합니다.

    ☞ 철자로 표현된 값이 숫자 값보다 훨씬 길기 때문에 새로운 필드 길이를 수용하기 위해 사용자는 필드 상자의 길이를 증가시킬 필요가 있습니다.

    ReplicateString(x, n)

    x는 문자열이고 n은 정수입니다.

    동작

    문자열 x를 n번 인쇄합니다. 간단한 막대 그래프를 *를 사용해서 작성하는 경우와 같이 문자열을 삽입하기 위해 이 함수를 사용합니다.

    예제

    조건에 맞으면 문자 "*" 를 10번 인쇄하는 수식은 다음과 같습니다.

    If {table.목표액} < {table.실적} Then

    ReplicateString("*",10)

    Else

    ""

    다음 수식은 고객점수 결과를 보여주는 막대 그래프를 인쇄합니다. 즉, 수식은 고객 점수 필드에 대해 별표를 인쇄합니다.

    {table.고객이름}+ " " + ReplicateString("*", {table.고객점수})

    Space(length)

    length는 정수입니다.

    동작

    지정된 수의 공백으로 구성된 값을 반환합니다.

    예제

    다음 수식은 " "를 반환합니다.

    Space(2)

    InStr (str1, str2), InStr (start, str1, str2)

    str1, str2는 문자열이고, start는 수치입니다.

    동작

    다른 문자열에서의 위치를 알려 줍니다. 위치를 지정하지 않으면 1이 지정된 것으로 동작됩니다. 만일 0이 반환되면 발견되지 않은 것입니다.

    예제

    다음 수식에서 2가 반환됩니다.

    InStr("abcdefg", "bcd")

    InStrRev(InputString)

    동작

    예제




    StrCmp(str1, str2), StrCmp(str1, str2, compare)

    str1, str2는 문자열이고 compare는 정수입니다.

    동작

    문자열 비교의 결과를 의미하는 값을 반환합니다.

    str1이 str2 보다 적으면 -1

    str1이str2와 같으면 0

    str1이str2보다 크면 1

    string1 또는 string2 이 Null이면 Null

    예제

    다음 수식은 1을 반환합니다.

    StrCmp("abcd", "aa")

    다음 수식은 -1을 반환합니다.

    StrCmp ("abcd", "ac")

    다음 수식은 0을 반환합니다.

    StrCmp ("aa", "aa")

    Mid(str, start), Mid(str, start, length)

    str은 문자열, start와 length는 수치입니다.

    동작

    Mid 함수는 한 문자열에서 지정된 수의 문자들을 반환합니다.

    예제

    다음 수식은 "cd"를 반환합니다.

    Mid("abcdef", 3, 2)

    Left(str, length)

    x는 텍스트 문자열입니다.

    동작

    지정한 수만큼 문자열의 앞 부분을 반환합니다.

    예제

    다음 수식에서 "abcd"가 반환됩니다.

    Left("abcdefg", 4)

     

    ->)Mid()

    CString Mid( int nFirst ) const;
    throw( CMemoryException );

    CString Mid( int nFirst, int nCount ) const;
    throw( CMemoryException );

     

    (예제)

    CString stra ="aaaa<bcd>eeeeeeeeee"ff"g";

    int nPoint=0, nNextPoint=0;

     

    nPoint=stra.Find("<", nPoint);  //0 처음부터 < 있는걸 찾아서 그 자리 값을 nPoint에

     

    stra.Mid(nPoint, 3); =><이후부터 3자리 찾으면, bcd 가 되겠졍~


    Right(str, length)

    str은 문자열이고 length는 정수입니다.

    동작

    문자열의 우측으로부터 지정된 수의 문자를 반환합니다.

    예제

    다음 수식은 "efg"를 반환합니다.

    Right("abcdefg", 3)

    Val(x)

    x는 문자열입니다.

    동작

    Val 함수는 문자열을 수치로 바꾸어줍니다.

    예제

    다음 수식은 2234100을 반환합니다.

    Val("2234 100th Street")

    Chr(x)

    x는 수치입니다.

    동작

    Asc 함수의 반대 동작을 합니다. 즉, 수치에 해당하는 문자를 반환합니다.

    예제

    다음 수식에서 아스키 값 65에 해당하는 A가 반환됩니다.

    Chr(65)

    ASC(x)

    x는 텍스트 문자나 문자열입니다.

    동작

    텍스트 문자나 문자 데이터 필드의 첫 문자의 아스키 값을 반환합니다.

    예제

    다음 수식에서 문자 A의 아스키 값인 65가 반환됩니다.

    Asc("A") = 65

     

     

    'Programming' 카테고리의 다른 글

    [펌] CString 함수 정리  (0) 2016.04.25

    Comment +0

    티스토리 툴바