2013. 11. 27. 14:00

특정 구분자를 이용하여 문자열을 자르는 기능을 'Split'라고 합니다.

C++용 'Split'를 구현하는 내용은 많은데 아두이노에 바로 적용할 수 없어서 아두이노용으로 다시 만들었습니다.

 

 

1. 구현 방법

스플릿을 구현하는 방법은 간단합니다.

1) 한 문자씩 검사를 한 다음

2) 구분용 문자가 나오면 잘라내고

3) 그 이후부터 다시 검사합니다.

이 과정을 반복하여 구분자를 잘라 냅니다.

 

문제는 언어마다 이 과정이 약간씩 다를 수 있다는 점입니다.

 

아두이노에서는 'indexOf'로 구분자의 위치를 찾은 다음 'substring'으로 문자열을 잘라내고 그 과정을 반복합니다.

 

 

2. 구현

이제 스플릿을 구현해 봅시다.

void Split(String sData, char cSeparator)
{	
	int nCount = 0;
	int nGetIndex = 0 ;

	//임시저장
	String sTemp = "";

	//원본 복사
	String sCopy = sData;

	while(true)
	{
		//구분자 찾기
		nGetIndex = sCopy.indexOf(cSeparator);

		//리턴된 인덱스가 있나?
		if(-1 != nGetIndex)
		{
			//있다.

			//데이터 넣고
			sTemp = sCopy.substring(0, nGetIndex);

			Serial.println( sTemp );
		
			//뺀 데이터 만큼 잘라낸다.
			sCopy = sCopy.substring(nGetIndex + 1);
		}
		else
		{
			//없으면 마무리 한다.
			Serial.println( sCopy );
			break;
		}

		//다음 문자로~
		++nCount;
	}

}

 

 

사용은

Split("[원본]", "[구분자]");

입니다.

(참고 : 스택오버플로 - Split String into String array)

 

 

마무리

원래를 구분자로 자른 데이터를 동적배열로 만들어서 리턴하려고 했는데.....

다른 분들이 만든 코드로 테스트했더니 아두이노가 죽는 현상이 있었습니다-_-;

 

그래서 리스트어레이(ListArray)를 구현할까 하다가 아두이노의 처리방식을 보면 '리스트어레이가 과연 효율적인가?'에 대한 의문이 있습니다.

어떻게 구현하여 사용하냐에 따라 오히려 리스트어레이보다는 배열의 크기를 고정하는 것이 더 좋아 보입니다.