5/25일경 올린 질문글
에 대해 3분이서 친절하게 답변을 달아주셔서 해결을 했습니다.
글링크를 들어가기 귀찮으신 분을 위해 질문글과 해결방법을 설명드리자면
1. 3자리의 수가 들어오게 됩니다 (001,002,....009,010,...998,999)
2. 들어온 숫자의 값은 +1되어서 나가야합니다 (001->002,....)
3. 999가 들어온순간 999부터는 규칙이 변화됩니다
4. 999가 들어오면 다음 숫자는 A01이 됩니다
5. 그다음 규칙은 A01,A02....A10,A11....A98,A99, B01,B02....B99....Z01....Z99 입니다.
이를 해결하고자 조건 3개(들어온 값이 1~998인지/999인지/나머지 인지)으로 나누어 나름 해결을 했는데
if 입력값 <= 1 and 입력값 >= 998 //입력값이 1~998인경우
RETURN 입력값=입력값+1
else if 입력값 == 999 //입력값이 999인경우
RETURN 입력값 = A01
else //나머지 경우 A01,A02...B01,B02....
strFnum 선언 //입력되는 3자리숫자중 앞에 첫번째 자리 문자 ex) A01에서 A에 해당
strBnum 선언 //입력되는 3자리숫자중 두 번째, 세 번째 자리 문자 ex) A01에서 01에 해당
strFnum=입력값.left(0)
strBum=입력값.right(1)
if strBnum == 99 //A99,B99,C99.....
strFnum= Asc(strFnum+1) // 아스키코드 값을 증가시켜 가르키는 알파벳 값을 올려줍니다.
strBnum=01
else //A01,A02....A98, B01,B02....B98....
strBnum=strBum + 1 //01->02, 02->03...
end if
RETURN 입력값 = strFnum & strBum
end if
보시는 바와같이 이중IF문이지만 조건의 갯수가 3개여서 보기가 좀 그렇습니다.
그래서 질문글을 올리게 되었고 답변 댓글들을 참조하여 아래와 같이 변형하였습니다.
1.숫자를 입력받는다
2.받은 숫자를 +1 증가 시킨다
3.증가된 값이 1000미만이면 그대로 리턴한다 (분기1)
4.증가된 값이 1000이상 이면 값을 100으로 나눠서 몫(fNum로 칭함)과 나머지(bNum로 칭함)로 따로 분리한다
4.1 fNum의 값에다가 +55를 하여 아스키 코드로 표현한다
4.2 bNum의 값이 0인경우 B의 값에 +1을 한다.
999->1000인경우 1000을 A01로 표현하기 위해서 00->01로 바꿔주어야 하기때문입니다.
4.3 fNum와 bNum의 값을 스트링형태로 묶어준다
4.4 원하고자 하는 표현 방식(A01)방식대로 나오며 이것을 반환한다. (분기2)
이렇게 해결이 되었습니다.
여기서 또 문제가 하나 발생하였었는데 1번과 2번 사이에서 받은 숫자가 일반적인 1~999가 아닌 A01,A02...인 경우가 발생하는데
이를 위해 값이 일반적인 정수인지, 아스키코드값이 잇는 숫자인지 판별하는 함수를 1과 2번 사이에 추가하여 해결을 하였습니다.