Split String in Dynamics AX

Posted by Alvin You
2014. 9. 10. 22:44 Dynamics AX/Development

프로그램 개발을 하다보면 많은 문자열 함수와 부딪히게 됩니다. 그 중 입력 받은 문자열을 특정 구분 문자를 통해서 문자열을 쪼개고 다시 그 값을 다른 계산이나 데이터베이스에 넣게 되는 작업을 많이 진행하게 됩니다.

그렇다면, 위와 같은 작업을 X++에서는 어떻게 진행할 수 있을까요? 많은 방법들이 있겠지만 아래 6가지 방법 중 본인이 편안하게 사용할 수 있는 방법을 가져다가 사용하면 될 것 같습니다.

1. 구분값 위치를 계산해서 문자열을 쪼개는 방법

static void splitString_old(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str seperator = ",";

    int lenInput = strLen(input);

    int nextPos;

    int lastPos = 1;

    str result;

    ;

 

    do

    {

        nextPos = strFind(input, seperator, nextPos + 1, lenInput - nextPos);

        if (nextPos == 0)

            nextPos = lenInput+1;

        result = subStr(input, lastPos, nextPos-lastPos);

        info(result);

 

        lastPos = nextPos+1;

    }

    while (nextPos != lenInput+1);

}

2. List Class 사용

static void splitString_list(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    List list;

    ListEnumerator le;

    ;

   

    list = new List(Types::String);

    list = strSplit(input, separator);

    le = list.getEnumerator();

   

    while ( le.moveNext())

    {

        result = le.current();

        info(result);

    }

 

}

3. Container Class 사용

static void splitString_con2str(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    container cont;

    int i;

    ;

   

    cont = str2con(input, separator);

    for (i=1; i <= conLen(cont); i++)

    {

        result = conPeek(cont, i);

        info(result);

    }

}

4. TextBuffer Class 사용

 

static void splitString_textBuffer(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    TextBuffer tb;

    ;

   

    tb = new TextBuffer();

    tb.ignoreCase(true);

    tb.regularExpressions(false);

   

    tb.setText(input);

    while ( tb.nextToken(false, separator))

    {

        result = tb.token();

        info(result);

    }

}

5. Regular Expression 사용

static void splitString_regEx(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = "\\,";

    str result;

    int i;

    System.Array resultArr;

    int resultArrLen;

    System.Exception clrException;

    ;

   

    try

    {

        resultArr = System.Text.RegularExpressions.Regex::Split(input, separator);

        resultArrLen = resultArr.get_Length();

       

        for (i=0;i<resultArrLen;++i)

        {

            result = CLRInterop::getAnyTypeForObject(resultArr.GetValue(i));

            info(result);

        }

    }

    catch(Exception::CLRError)

    {

        clrException = CLRInterop::getLastException();

        if(clrException)

        {

            info(CLRInterop::getAnyTypeForObject(clrException.get_Message()));           

        }

    }

}

6. NET String Function 사용

static void splitString_dotNet(Args _args)

{

    System.String input = "Minho,Ricky,Hansuk,Sangwook";

    System.Char[] separator = new System.Char[1]();

    System.Char symbol = System.Char::Parse(',');

    System.String[] result;

    int resultLen;

    int i;

    ;

   

    separator.set_Item(0, symbol);

    result = input.Split(separator);

    resultLen = result.get_Length();

   

    for (i=0;i<resultLen;i++)

    {

        System.Windows.Forms.MessageBox::Show(result.get_Item(i));

    }

}