Split String in Dynamics AX
프로그램 개발을 하다보면 많은 문자열 함수와 부딪히게 됩니다. 그 중 입력 받은 문자열을 특정 구분 문자를 통해서 문자열을 쪼개고 다시 그 값을 다른 계산이나 데이터베이스에 넣게 되는 작업을 많이 진행하게 됩니다.
그렇다면, 위와 같은 작업을 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));
}
}
'Dynamics AX > Development' 카테고리의 다른 글
X++에서 AX 2012 Table에 이미지 저장하기 (0) | 2015.01.16 |
---|---|
자주 쓰는 X++ 기본 내장 함수 정리 (0) | 2014.10.28 |
X++에서 XML 파일로 데이터 저장하고 읽기 (0) | 2014.08.02 |
X++에서 직접 SQL 실행하기 (0) | 2014.07.29 |
Create Dynamic Table in the X++ (0) | 2013.09.24 |