Five RTL 구현 목록 — 파일 + 문자열 + 날짜
현재: 417개 구현 / Harbour 1,011개
이 목록 완료 시: ~472개 (47%) → 비즈니스 앱 실질 커버리지 ~85%
1. 파일/디렉토리 (20개)
이미 있음 ✅
구현 필요 (20개)
| # |
함수 |
설명 |
Go 대응 |
난이도 |
| 1 |
HB_FSIZE(cFile) |
파일 크기 (bytes) |
os.Stat().Size() |
쉬움 |
| 2 |
HB_FCOPY(cSrc, cDst) |
파일 복사 |
io.Copy |
쉬움 |
| 3 |
HB_FEOF(nHandle) |
파일 끝 확인 |
f.Read() == 0 |
쉬움 |
| 4 |
HB_FCOMMIT(nHandle) |
파일 플러시 |
f.Sync() |
쉬움 |
| 5 |
HB_FREADLEN(nH, nLen) |
N바이트 읽기 |
f.Read(buf) |
쉬움 |
| 6 |
HB_FGETATTR(cFile) |
파일 속성 |
os.Stat().Mode() |
쉬움 |
| 7 |
HB_FSETATTR(cFile, n) |
파일 속성 설정 |
os.Chmod() |
쉬움 |
| 8 |
HB_FGETDATETIME(cFile) |
파일 수정일시 |
os.Stat().ModTime() |
중간 |
| 9 |
HB_FSETDATETIME(cFile, d, t) |
파일 날짜 설정 |
os.Chtimes() |
중간 |
| 10 |
HB_FLOCK(nH, nOff, nLen) |
파일 잠금 |
syscall.Flock() |
중간 |
| 11 |
HB_FUNLOCK(nH, nOff, nLen) |
파일 잠금 해제 |
syscall.Flock() |
중간 |
| 12 |
HB_FILEDELETE(cMask) |
와일드카드 삭제 |
filepath.Glob + os.Remove |
중간 |
| 13 |
HB_FILEMATCH(cFile, cMask) |
와일드카드 매칭 |
filepath.Match |
쉬움 |
| 14 |
HB_FNAMEEXISTS(cFile) |
파일/디렉토리 존재 |
os.Stat() |
쉬움 |
| 15 |
HB_FNAMEEXTSET(cFile, cExt) |
확장자 변경 |
strings.TrimSuffix + 추가 |
쉬움 |
| 16 |
HB_FNAMENAMEEXT(cFile) |
이름+확장자 |
filepath.Base |
쉬움 |
| 17 |
HB_MEMOREAD(cFile) |
파일 전체 읽기 |
이미 MEMOREAD 있음, alias |
쉬움 |
| 18 |
HB_MEMOWRIT(cFile, cData) |
파일 전체 쓰기 |
이미 MEMOWRIT 있음, alias |
쉬움 |
| 19 |
HB_DIRTEMP() |
임시 디렉토리 경로 |
os.TempDir() |
쉬움 |
| 20 |
HB_DISKSPACE(cDrive) |
디스크 여유 공간 |
syscall.Statfs |
중간 |
2. 문자열 (20개)
이미 있음 ✅
AT, RAT, SUBSTR, LEFT, RIGHT, PADR, PADL, PADC, STRTRAN, REPLICATE,
STUFF, UPPER, LOWER, ALLTRIM, LTRIM, RTRIM, SPACE, CHR, ASC, LEN,
VAL, STR, TRANSFORM, TOKEN, NUMTOKEN,
HB_VALTOEXP, HB_VALTOSTR, HB_NTOS, HB_CSTR,
HB_NUMTOHEX, HB_HEXTONUM, HB_STRTOHEX, HB_HEXTOSTR,
HB_TOKENGET, HB_TOKENCOUNT, HB_ATOKENS,
HB_UTF8LEN, HB_UTF8SUBSTR, HB_UTF8TOSTR, HB_STRTOUTF8,
HB_UTF8AT, HB_UTF8LEFT, HB_UTF8RIGHT
구현 필요 (15개)
| # |
함수 |
설명 |
Go 대응 |
난이도 |
| 1 |
HB_AT(cSub, cStr [,nFrom]) |
AT + 시작위치 |
strings.Index + offset |
쉬움 |
| 2 |
HB_RAT(cSub, cStr) |
뒤에서 찾기 + 확장 |
strings.LastIndex |
쉬움 |
| 3 |
HB_ATI(cSub, cStr) |
대소문자 무시 찾기 |
strings.ToUpper + Index |
쉬움 |
| 4 |
HB_ATX(cRegex, cStr) |
정규식 찾기 |
regexp.FindString |
중간 |
| 5 |
HB_LEFTEQI(cStr, cPrefix) |
대소문자 무시 시작 비교 |
strings.EqualFold |
쉬움 |
| 6 |
HB_ASCIIISALPHA(n) |
알파벳 여부 |
unicode.IsLetter |
쉬움 |
| 7 |
HB_ASCIIISDIGIT(n) |
숫자 여부 |
unicode.IsDigit |
쉬움 |
| 8 |
HB_ASCIIISLOWER(n) |
소문자 여부 |
unicode.IsLower |
쉬움 |
| 9 |
HB_ASCIIISUPPER(n) |
대문자 여부 |
unicode.IsUpper |
쉬움 |
| 10 |
HB_STRISUTF8(cStr) |
UTF-8 유효성 |
utf8.Valid |
쉬움 |
| 11 |
HB_STRDECODESCAPE(cStr) |
\n \t 등 이스케이프 |
strconv.Unquote |
중간 |
| 12 |
HB_STRXOR(cStr, cKey) |
XOR 암호화 |
byte loop |
쉬움 |
| 13 |
HB_WILDMATCH(cMask, cStr) |
와일드카드 매칭 |
filepath.Match |
쉬움 |
| 14 |
HB_WILDMATCHI(cMask, cStr) |
대소문자 무시 와일드카드 |
ToUpper + Match |
쉬움 |
| 15 |
HARDCR(cStr) |
Soft CR → Hard CR |
strings.ReplaceAll |
쉬움 |
3. 날짜/시간 (20개)
이미 있음 ✅
구현 필요 (20개)
| # |
함수 |
설명 |
Go 대응 |
난이도 |
| 1 |
HB_DATE(nY, nM, nD) |
날짜 생성 |
Julian 변환 |
쉬움 |
| 2 |
HB_CTOD(cDate, cFmt) |
포맷 지정 문자열→날짜 |
time.Parse |
중간 |
| 3 |
HB_DTOC(dDate, cFmt) |
포맷 지정 날짜→문자열 |
time.Format |
중간 |
| 4 |
HB_STOD(cDate) |
"YYYYMMDD"→날짜 |
이미 STOD 있음, alias |
쉬움 |
| 5 |
HB_DTOT(dDate) |
Date→Timestamp (자정) |
Julian + 0ms |
쉬움 |
| 6 |
HB_TTOD(tTimestamp) |
Timestamp→Date (시간 제거) |
Julian만 |
쉬움 |
| 7 |
HB_TTOHOUR(tTS) |
시 추출 |
ms / 3600000 |
쉬움 |
| 8 |
HB_TTOMIN(tTS) |
분 추출 |
ms / 60000 % 60 |
쉬움 |
| 9 |
HB_TTOSEC(tTS) |
초 추출 |
ms / 1000 % 60 |
쉬움 |
| 10 |
HB_TTOMSEC(tTS) |
밀리초 추출 |
ms % 1000 |
쉬움 |
| 11 |
HB_TTON(tTS) |
Timestamp→초 (자정부터) |
ms / 1000 |
쉬움 |
| 12 |
HB_NTOT(dDate, nSec) |
Date+초→Timestamp |
Julian + sec*1000 |
쉬움 |
| 13 |
HB_NTOHOUR(nSec) |
초→시 |
nSec / 3600 |
쉬움 |
| 14 |
HB_NTOMIN(nSec) |
초→분 |
nSec / 60 % 60 |
쉬움 |
| 15 |
HB_NTOSEC(nSec) |
초→초 (mod 60) |
nSec % 60 |
쉬움 |
| 16 |
HB_WEEK(dDate) |
ISO 주차 |
time.ISOWeek |
쉬움 |
| 17 |
HB_CDAY(nDow) |
요일 번호→이름 |
time.Weekday.String |
쉬움 |
| 18 |
DAYS(nSec) |
초→일수 |
nSec / 86400 |
쉬움 |
| 19 |
ELAPTIME(cStart, cEnd) |
경과시간 "HH:MM:SS" |
파싱 + 차이 |
중간 |
| 20 |
AMPM(cTime) |
"13:00"→"01:00 PM" |
파싱 + 변환 |
쉬움 |
4. 추가 필수 유틸 (5개)
| # |
함수 |
설명 |
Go 대응 |
난이도 |
| 1 |
HB_SETENV(cVar, cVal) |
환경변수 설정 |
os.Setenv |
쉬움 |
| 2 |
HB_PS() |
경로 구분자 |
string(os.PathSeparator) |
쉬움 |
| 3 |
HB_EOL() |
줄바꿈 문자 |
"\n" 또는 "\r\n" |
쉬움 |
| 4 |
HB_ISNULL(x) |
Empty string/NIL |
IsNil || "" |
쉬움 |
| 5 |
ERRORSYS() |
기본 에러 핸들러 |
stub |
쉬움 |
요약
| 카테고리 |
추가 수 |
쉬움 |
중간 |
| 파일/디렉토리 |
20 |
14 |
6 |
| 문자열 |
15 |
13 |
2 |
| 날짜/시간 |
20 |
17 |
3 |
| 유틸 |
5 |
5 |
0 |
| 합계 |
60 |
49 |
11 |
예상 시간: 쉬움 49개 × 5분 + 중간 11개 × 15분 = ~7시간
완료 후 RTL: 417 + 60 = 477개 (47%)
비즈니스 앱 실질 커버리지: ~85%