문자열 처리 함수

CUBLOC2에서 문자열은 독립된 String 변수형 대신 1차원 Byte 배열로 관리됩니다.

Dim Str() As Byte = "Comfile Technology"  ' 맨끝에 자동으로 NULL 값이 들어갑니다.
Dim Str1() = "Comfile Technology"         ' As Byte는 생략 가능

문자열 초기화

문자열을 비우려면 배열의 첫 번째 요소에 0을 대입합니다. 일반 BASIC의 Str = “” 와 동일한 효과입니다.

Dim Sarr(32) As Byte  ' 크기를 지정하여 배열 선언
Sarr(0) = 0           ' 문자열 초기화 (비우기)
참고: 첫 번째 바이트를 NULL값인 0으로 설정하면 Null 종결자로 인식되어 빈 문자열로 처리됩니다. 배열 전체를 0으로 채울 필요는 없습니다.

1. 길이 및 복사

함수 설명 주의사항 사용 예
Len 문자열의 길이를 반환합니다. Null 문자는 포함되지 않습니다. 한글은 1글자당 3개로 계산됩니다. Ires = Len(Sarr())
Strcopy Sarr2의 문자열을 Sarr1에 복사합니다. Sarr1의 크기가 충분해야 합니다. Strcopy(Sarr1(), Sarr2())

2. 문자열 연결

함수 설명 주의사항 사용 예
Strcat Sarr2를 Sarr1의 끝에 이어 붙입니다. Sarr1의 크기가 두 문자열을 합친 길이보다 커야 합니다. Strcat(Sarr1(), Sarr2())

3. 문자열 비교

함수 설명 반환값 사용 예
Strcomp 두 문자열을 비교합니다. 같으면 0, Sarr1이 크면 양수, 작으면 음수 Ires = Strcomp(Sarr1(), Sarr2())
Strcomp 두 문자열을 최대 n자까지 비교합니다. 같으면 0, Sarr1이 크면 양수, 작으면 음수 Ires = Strcomp(Sarr1(), Sarr2(), n)

4. 문자열 검색

함수 설명 반환값 사용 예
Instr 문자열에서 특정 문자가 처음 나타나는 위치를 찾습니다. 찾은 위치의 인덱스, 없으면 0 Ires = Instr(Sarr(), “A”)
Instr 문자열에서 특정 부분 문자열을 찾습니다. 찾은 위치의 인덱스, 없으면 0 Ires = Instr(Sarr1(), Sarr2())

5. 문자열 추출

함수 설명 주의사항 사용 예
Left Ssrc의 앞에서 n자를 Sdest에 복사합니다. Sdest의 크기가 충분해야 합니다. Left(Sdest(), Ssrc(), n)
Right Ssrc의 뒤에서 n자를 Sdest에 복사합니다. Sdest의 크기가 충분해야 합니다. Right(Sdest(), Ssrc(), n)
Mid Ssrc의 start 위치부터 n자를 Sdest에 복사합니다. Sdest의 크기가 충분해야 합니다. Mid(Sdest(), Ssrc(), start, n)

6. 형식화 문자열

숫자나 여러 값을 문자열로 변환할 때 사용합니다.

함수 설명 사용 예
Format 형식 문자열에 따라 값을 문자열로 변환하여 Byte 배열에 저장합니다. 최대 n자까지만 저장하므로 버퍼 초과를 방지합니다. Format(Sarr(), n, “%d”, Ival)

주요 서식 지정자는 다음과 같습니다.

서식 설명 예시
%d Integer 정수 Format(Sarr(), 16, “%d”, Ival)
%f Single 실수 Format(Sarr(), 16, “%f”, Fval)
%.2f 소수점 이하 2자리 실수 Format(Sarr(), 16, “%.2f”, Fval)
%s 문자열 Format(Sarr1(), 32, “%s”, Sarr2())
%x 16진수 정수 Format(Sarr(), 16, “%x”, Ival)

7. 숫자 변환

함수 설명 반환값 사용 예
Val 문자열을 Integer로 변환합니다. 변환할 수 없는 문자가 나오면 그 앞까지만 변환합니다. Integer Ires = Val(Sarr())
Valf 문자열을 Single 실수로 변환합니다. 변환할 수 없는 문자가 나오면 그 앞까지만 변환합니다. Single Fres = Valf(Sarr())
참고: 한글(UTF-8)은 한 글자당 3바이트를 차지합니다. 배열 크기 선언 시 이를 고려하십시오.
예) 8글자 한글 문자열의 경우 최소 (8 × 3) + 1 = 25바이트가 필요합니다.

사용 예에서 선언한 변수들

  • Sarr(), Sdest(), Ssrc() : 문자열을 담는 Byte 배열 (Dim Sarr() As Byte)
  • Sarr1(), Sarr2() : 두 개의 Byte 배열이 필요한 경우
  • Ires : 정수형 결과 변수 (Dim Ires As Integer)
  • Fres : 실수형 결과 변수 (Dim Fres As Single)
  • n : 처리할 문자 수 (정수)
  • start : 시작 위치 (정수, 0부터 시작)

테스트 소스

'==============================
' String Function Test
'==============================

Dim Str1() = "Comfile Technology"   '원본 문자열
Dim Str2(50) As Byte                '복사용 버퍼
Dim Str3(50) As Byte                '미사용
Dim Str4() = "logy"                 '검색할 부분 문자열
Dim Str5(50) As Byte                'Left 결과 저장용 버퍼
Dim Ival As Integer

Wait 500

'------------------------------
' 1. 문자열 복사
'------------------------------
Strcopy(Str2(), Str1())

Print "Len(Str1) = ", Dec Len(Str1()), Cr
Print "Str2 = ", Str2(), Cr

'------------------------------
' 2. 문자열 비교
'------------------------------
Print "Comp(Str1, Str2) = ", Dec Strcomp(Str1(), Str2()), Cr

'------------------------------
' 3. 문자열 이어붙이기
'------------------------------
Strcat(Str2(), Str1())
Print "After Strcat, Str2 = ", Str2(), Cr

'앞의 5글자만 비교
Print "Comp(Str2, Str1, 5) = ", Dec Strcomp(Str2(), Str1(), 5), Cr

'------------------------------
' 4. 부분 문자열 검색
'------------------------------
Print "Instr(Str2, Str4) = ", Dec Instr(Str2(), Str4()), Cr

'------------------------------
' 5. 왼쪽 일부 추출
'------------------------------
Left(Str5(), Str1(), 7)
Print "Left(Str1, 7) = ", Str5(), Cr

'------------------------------
' 6. 오른쪽 일부 추출
'------------------------------
Right(Str5(), Str1(), 7)
Print "Right(Str1, 7) = ", Str5(), Cr

'------------------------------
' 7. 중간 일부 추출
'------------------------------
Mid(Str5(), Str1(), 7, 3)
Print "Mid(Str1, 7, 3) = ", Str5(), Cr

'------------------------------
' 8. Format 명령
'------------------------------

Ival = 53
Format(Str5(), 10, "%x", Ival)
Print "Format(10,%x,Ival) = ", Str5(), Cr

← CUBLOC2 목차로 돌아가기