0)
배치도의 배치번호에 일일이 for 문 대입하던 문제를
보기 편하게, 좀 더 적은 코드로
줄일수 있지 않을까..라는 생각에서 시작된 내용입니다.
(코믹월드의 배치도를 수정하기를 몇년간(응?) 하다가.. = =..)
..
1)
<DIV id=output130609_1></DIV>
<SCRIPT>
(function() {
function len2(v) {
var ov = '' + v;
if (ov.length < 2) ov = '0' + ov;
return ov;
}
function listMaker(charv, lstring) {
var last = 0,
posting = 0,
dGet = /[-\d]+/,
eGet = /[^-\d]+/,
ov = [],
oo, i, j, dv, ev, dp, ep;
while (dGet.test(lstring) || eGet.test(lstring)) {
dv = dGet.exec(lstring);
ev = eGet.exec(lstring);
// if (dv) dp = dv.lastIndex - dv[0].length;
// else dp = ev.lastIndex + 1;
// if (ev) ep = ev.lastIndex - ev[0].length;
// else ep = dv.lastIndex + 1;
if (dv) dp = lstring.indexOf(dv[0]);
else dp = lstring.indexOf(ev[0]) + ev[0].length + 1;
if (ev) ep = lstring.indexOf(ev[0]);
else ep = lstring.indexOf(dv[0]) + dv[0].length + 1;
if (dp < ep) {
oo = dv[0];
if (posting) {
if ((last - oo) <= 0) {
for (i = last + 1, j = 50;
(i - oo) <= 0; i++) {
ov.push(charv + (charv.length > 3 ? i : len2(i)));
last = i;
if (--j < 0) break;
}
} else {
for (i = last - 1, j = 50;
(i - oo) >= 0; i--) {
ov.push(charv + (charv.length > 3 ? i : len2(i)));
last = i;
if (--j < 0) break;
}
}
posting = 0;
} else {
ov.push(charv + (charv.length > 3 ? (oo) : len2(oo)));
last = parseInt(oo);
}
// lstring = lstring.substring(dv.lastIndex, lstring.length);
lstring = lstring.substring(lstring.indexOf(dv[0])+dv[0].length, lstring.length);
} else {
oo = ev[0];
if (oo == '..') posting = 1;
else posting = 0;
// lstring = lstring.substring(ev.lastIndex, lstring.length);
lstring = lstring.substring(lstring.indexOf(ev[0])+ev[0].length, lstring.length);
}
}
return ov;
}
// document.write(listMaker('D', '17..15,14-1,14..1'));
document.getElementById('output130609_1').innerHTML = listMaker('D', '17..15,14-1,14..1');
})();
</SCRIPT>
-- 새 창에 샘플 보여주기.. --
..
2)
..
3)
함수정의는
한 블럭에 대표기호가 있고 (요것도 묶을 수 있었지만, .. 일단 묶지 않았습니다..)
대표기호 뒤로 부스번호가 따라붙는다..입니다.
부스번호가 한두개가 아니라서
".." 이라는, 알아서 연결하라는 기호도 사용했구요..
..
4)
접근 방식은
"-" 포함한 숫자(?)와 (배치도블럭 내 배치번호) -- dGet
그렇지 않는 문자를 구별하는 겁니다. (배치번호간 구분용..) -- eGet
연결된 번호는 ".." 으로 하고, -- posting=1
나머지는 모두 번호분리..로 처리한거죠. -- else posting=0
번호가 정순이든 역순이든 일단 받을 수 있게 처리를 했습니다. -- if ((last-oo)<=0)
처리한 문장(?)들은 다음 문장을 처리하기 위해(?), 잘라주고
-- lstring = lstring.substring(lstring.indexOf(dv[0])+dv[0].length, lstring.length)
-- lstring = lstring.substring(lstring.indexOf(ev[0])+ev[0].length, lstring.length)
그렇게 다음번으로 넘어갑니다.
..
last 가 for 문 안에 있는 것은..
표시한 번호와 연동하겠다..라는 뜻으로 보시면 됩니다.
.. 혹시나..싶은 overflow 를 방지하기 위해
부스번호 처리하는 루프에 j 를 넣어, 체크하도록 했습니다. -- if (--j < 0) break;
..
처리할 번호가 없다면 -- while (dGet.test(lstring) || eGet.test(lstring))
루프 종료하고,
받은 부스 번호들을 array 로 출력하여
표시한 결과입니다.
..
5)
변수중에 dGet 이나 eGet 같은 공통값은 밖으로 빼는게 맞겠지만..
.. 뭐, 그런 사소한(?) 건 일단 접어두고.. (대형프로젝트가 아니라서요.. 메모리 누수가 사소한이라니 = =..)
..
곰곰히 생각해보니, dGet 과 eGet 을 하나로 통일시킬 수도 있었네요.
그렇게 하면 if 를 덜 사용할 수도 있으니까요.
/([-\d]*)([^-\d]*)/
이렇게 하면 $1 의 값이 있느냐 없느냐로 구별 할 수 있겠죠..? ( 이제서야 생각났다는 것이 좀 아쉽습니다. )
( /([-\d]+)([^-\d]+)/ 의 경우에는, 찾을 수 없을 버그가 있어서 내용은 바꿨습니다.. )
..
또 하나,
for 문에 (i-oo)>=0 이나 (i-oo)<=0 부분에 대해
"=" 을 쓰지않을 수 있는 부분인데,
그렇게되면 " posting = 0 " 아래쪽에 있는 " } else { .. } " 가 " .. " 으로 바뀔 수 있겠죠.
거기에 따라서 for 문 내에 있는 last=i 도 생략할 수 있을거구요..
.. 제3자..는 아니지만,
이렇게 나중에 볼 때 생각나는 방법론이 하나하나 새롭기만하군요 ㅜ.ㅜ..
..
6) 덧..
chrome 과 firefox 에서 regexp.lastIndex 사용 안된다는 걸 매번 깜빡 하네요..
string.indexOf(regexp[0])+regexp[0].length 로 바꿨습니다. ㅜ.ㅜ..
..
..
wantHate killofki@.
배치도의 배치번호에 일일이 for 문 대입하던 문제를
보기 편하게, 좀 더 적은 코드로
줄일수 있지 않을까..라는 생각에서 시작된 내용입니다.
(코믹월드의 배치도를 수정하기를 몇년간(응?) 하다가.. = =..)
..
1)
<DIV id=output130609_1></DIV>
<SCRIPT>
(function() {
function len2(v) {
var ov = '' + v;
if (ov.length < 2) ov = '0' + ov;
return ov;
}
function listMaker(charv, lstring) {
var last = 0,
posting = 0,
dGet = /[-\d]+/,
eGet = /[^-\d]+/,
ov = [],
oo, i, j, dv, ev, dp, ep;
while (dGet.test(lstring) || eGet.test(lstring)) {
dv = dGet.exec(lstring);
ev = eGet.exec(lstring);
// if (dv) dp = dv.lastIndex - dv[0].length;
// else dp = ev.lastIndex + 1;
// if (ev) ep = ev.lastIndex - ev[0].length;
// else ep = dv.lastIndex + 1;
if (dv) dp = lstring.indexOf(dv[0]);
else dp = lstring.indexOf(ev[0]) + ev[0].length + 1;
if (ev) ep = lstring.indexOf(ev[0]);
else ep = lstring.indexOf(dv[0]) + dv[0].length + 1;
if (dp < ep) {
oo = dv[0];
if (posting) {
if ((last - oo) <= 0) {
for (i = last + 1, j = 50;
(i - oo) <= 0; i++) {
ov.push(charv + (charv.length > 3 ? i : len2(i)));
last = i;
if (--j < 0) break;
}
} else {
for (i = last - 1, j = 50;
(i - oo) >= 0; i--) {
ov.push(charv + (charv.length > 3 ? i : len2(i)));
last = i;
if (--j < 0) break;
}
}
posting = 0;
} else {
ov.push(charv + (charv.length > 3 ? (oo) : len2(oo)));
last = parseInt(oo);
}
// lstring = lstring.substring(dv.lastIndex, lstring.length);
lstring = lstring.substring(lstring.indexOf(dv[0])+dv[0].length, lstring.length);
} else {
oo = ev[0];
if (oo == '..') posting = 1;
else posting = 0;
// lstring = lstring.substring(ev.lastIndex, lstring.length);
lstring = lstring.substring(lstring.indexOf(ev[0])+ev[0].length, lstring.length);
}
}
return ov;
}
// document.write(listMaker('D', '17..15,14-1,14..1'));
document.getElementById('output130609_1').innerHTML = listMaker('D', '17..15,14-1,14..1');
})();
</SCRIPT>
-- 새 창에 샘플 보여주기.. --
..
2)
..
3)
함수정의는
한 블럭에 대표기호가 있고 (요것도 묶을 수 있었지만, .. 일단 묶지 않았습니다..)
대표기호 뒤로 부스번호가 따라붙는다..입니다.
부스번호가 한두개가 아니라서
".." 이라는, 알아서 연결하라는 기호도 사용했구요..
..
4)
접근 방식은
"-" 포함한 숫자(?)와 (배치도블럭 내 배치번호) -- dGet
그렇지 않는 문자를 구별하는 겁니다. (배치번호간 구분용..) -- eGet
연결된 번호는 ".." 으로 하고, -- posting=1
나머지는 모두 번호분리..로 처리한거죠. -- else posting=0
번호가 정순이든 역순이든 일단 받을 수 있게 처리를 했습니다. -- if ((last-oo)<=0)
처리한 문장(?)들은 다음 문장을 처리하기 위해(?), 잘라주고
-- lstring = lstring.substring(lstring.indexOf(dv[0])+dv[0].length, lstring.length)
-- lstring = lstring.substring(lstring.indexOf(ev[0])+ev[0].length, lstring.length)
그렇게 다음번으로 넘어갑니다.
..
last 가 for 문 안에 있는 것은..
표시한 번호와 연동하겠다..라는 뜻으로 보시면 됩니다.
.. 혹시나..싶은 overflow 를 방지하기 위해
부스번호 처리하는 루프에 j 를 넣어, 체크하도록 했습니다. -- if (--j < 0) break;
..
처리할 번호가 없다면 -- while (dGet.test(lstring) || eGet.test(lstring))
루프 종료하고,
받은 부스 번호들을 array 로 출력하여
표시한 결과입니다.
..
5)
변수중에 dGet 이나 eGet 같은 공통값은 밖으로 빼는게 맞겠지만..
.. 뭐, 그런 사소한(?) 건 일단 접어두고.. (대형프로젝트가 아니라서요.. 메모리 누수가 사소한이라니 = =..)
..
곰곰히 생각해보니, dGet 과 eGet 을 하나로 통일시킬 수도 있었네요.
그렇게 하면 if 를 덜 사용할 수도 있으니까요.
/([-\d]*)([^-\d]*)/
이렇게 하면 $1 의 값이 있느냐 없느냐로 구별 할 수 있겠죠..? ( 이제서야 생각났다는 것이 좀 아쉽습니다. )
( /([-\d]+)([^-\d]+)/ 의 경우에는, 찾을 수 없을 버그가 있어서 내용은 바꿨습니다.. )
..
또 하나,
for 문에 (i-oo)>=0 이나 (i-oo)<=0 부분에 대해
"=" 을 쓰지않을 수 있는 부분인데,
그렇게되면 " posting = 0 " 아래쪽에 있는 " } else { .. } " 가 " .. " 으로 바뀔 수 있겠죠.
거기에 따라서 for 문 내에 있는 last=i 도 생략할 수 있을거구요..
.. 제3자..는 아니지만,
이렇게 나중에 볼 때 생각나는 방법론이 하나하나 새롭기만하군요 ㅜ.ㅜ..
..
6) 덧..
chrome 과 firefox 에서 regexp.lastIndex 사용 안된다는 걸 매번 깜빡 하네요..
string.indexOf(regexp[0])+regexp[0].length 로 바꿨습니다. ㅜ.ㅜ..
..
..
wantHate killofki@.
'string' 카테고리의 다른 글
inc] 스트링 값을 덧셈해봅니다. (0) | 2013.11.28 |
---|---|
stringrReplaceAll ver2] 기능을 살짝 추가해봤습니다. (0) | 2013.09.17 |
RegExp] 태그 범위를 받아봅니다. (0) | 2013.06.06 |
tag] html 소스 태그 삭제용 스크립트.. (for IE8) (0) | 2012.11.20 |
개조 base64] '+' 기호 줄이기... (0) | 2011.03.01 |