====== 문자열 처리 함수 ====== 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 [[..:index|← CUBLOC2 목차로 돌아가기]]