0)
카메라앱을 자주 사용하다보니,
나온 파일들을 일단, 시간순서대로 엮어야 할 필요성이 있더라구요.
1)
문제는, 앱마다 파일 고유(?)의 날짜 특성이 있어서요,
그런 문제를 해결하기 위해 만들어봤습니다.
..
2)
<textarea id=x1_131209_1 style=width:300px;height:300px;overflow:auto; >
C 드라이브의 볼륨: Windows
볼륨 일련 번호: 2CFB-52A7
C:\Documents and Settings\xxxx\바탕 화면\사본 - 130509_1 (3) 디렉터리
2013-09-23 오후 07:16 <DIR> .
2013-09-23 오후 07:16 <DIR> ..
2013-05-09 오후 11:52 386,438 09-05-2013 11.12.47.jpg
2013-05-09 오후 11:48 1,367,483 2013-05-09_18-56-47_HDR.jpg
2013-05-09 오후 11:48 1,105,082 2013-05-09_18-58-00_HDR.jpg
2013-05-09 오후 11:48 421,363 2013-05-09_19-14-40_Night.jpg
2013-05-09 오후 11:48 1,009,763 2013-05-09_19-38-40_HDR.jpg
2013-05-09 오후 11:48 547,616 2013-05-09_19-39-49_Night.jpg
2013-05-09 오후 11:48 1,031,007 2013-05-09_19-51-38_HDR.jpg
2013-05-13 오후 03:18 1,408,516 2013-05-10_16-21-48_HDR.jpg
2013-09-23 오후 07:16 0 d.txt
2013-05-09 오후 11:48 293,980 PANO_20130509_200953.jpg
2013-05-09 오후 11:48 246,804 PANO_20130509_201102.jpg
11개 파일 7,818,052 바이트
2개 디렉터리 30,259,392,512 바이트 남음
</textarea>
<textarea id=x2_131209_1 style=width:300px;height:300px;overflow:auto; onclick="execCommand('selectAll');execCommand('copy');" ></textarea>
<script>
(function(){
function $(v) {
var ov=document.getElementById(v);
return ov?ov:document.getElementByName(v);
}
var
x1=$('x1_131209_1')
, x2=$('x2_131209_1')
, lineGetter=/[^\n\r]+/g
, lv, nlv
, nameOther=/(\d{4})-(\d\d)-(\d\d)\s\s오(전|후)\s(\d\d):(\d\d)\s+([\d,]+)\s+(?!\d{8}-\d{6}_)([^\s][^\n\r]*)/i
, nameGetters=[
/^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_HDR\.jpg$/i
, /^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_Night\.jpg$/i
, /^PANO_(\d{8})_(\d{6})\.jpg$/i
]
, otherGetter=
/^(\d\d)-(\d\d)-(\d{4})\s(\d\d)\.(\d\d)\.(\d\d)\.jpg$/i
// '$3$2$1-$4$5$6_'
, nameDates=[
'$1$2$3-$4$5$6_'
, '$1$2$3-$4$5$6_'
, '$1-$2_'
]
, nv, np, hv, nf
, sc=/\s/
, ddv=new Date()
;
function two(v) {
v+='';
while (v.length<2) v='0'+v;
return v;
}
String.prototype.replaceAll=function() {
var ar=arguments, arl=ar.length, ov=this;
for (i=0; i<arl; i+=2) {
ov=ov.replace(ar[i], ar[i+1]);
}
return ov;
}
x1.onclick=function(evt){
var
ev=evt?evt:window.event
, v=ev.srcElement.innerText;
;
var ov='';
while (lv=lineGetter.exec(v)) {
nf='';
nlv=lv[0];
if (nv=nameOther.exec(lv[0])) {
hv=((nv[4]=='전'?0:12)+(nv[5]%12))+'';
if (hv.length<2) hv='0'+hv;
if (nv[8]!='.')
if (nv[8]!='..')
if (nv[8]!='d.txt')
nf=nv[1]+nv[2]+nv[3]+'-'+hv+nv[6]+'00_'+nv[8];
nlv=nv[8];
}
for (np=0; np<nameGetters.length; np++) {
if (nv=nameGetters[np].exec(nlv)) {
nf=nv[0].replace(nameGetters[np], nameDates[np])+nv[0];
break;
}
}
if (np==nameGetters.length) { // UTC 파일 기준..
if (nv=otherGetter.exec(nlv)) {
ddv.setUTCFullYear(nv[3]);
ddv.setUTCMonth(nv[2]-1);
ddv.setUTCDate(nv[1]);
ddv.setUTCHours(nv[4]);
ddv.setUTCMinutes(nv[5]);
ddv.setUTCSeconds(nv[6]);
ddv.setUTCMilliseconds(0);
nf='{y}{m}{d}-{H}{M}{S}_'.replaceAll(
/{y}/, ddv.getFullYear()
, /{m}/, two(ddv.getMonth()+1)
, /{d}/, ddv.getDate()
, /{H}/, ddv.getHours()
, /{M}/, ddv.getMinutes()
, /{S}/, ddv.getSeconds()
)+nlv;
}
}
if (nf) {
if (sc.exec(nlv)) nlv='"'+nlv+'"';
if (sc.exec(nf)) nf='"'+nf+'"';
ov+=nf?'ren '+nlv+' '+nf+'\r\n':'';
}
}
x2.innerText=ov;
};
})();
</script>
-- 새 창에 샘플 보여주기.. --
..
3)
..
4)
디렉토리 리스트를 dir로 뽑은 내용을 첫번째 textarea 에 넣고 클릭하면,
해당 내용들에서 촬영시각정보를 추출해서
이름변환용 MS-DOS batch 파일 내용을 만들어
두번째 textarea 에 출력한다..는 내용입니다.
..
5)
lv 는 라인입력기이고, ( from lineGetter )
nf 는 변환될 파일명,
nameOther 는 해당 파일의 날짜프로필 추출용이고,
nameGetter 는 특정파일(?)들의 파일명프로필,
nameDates 는 특정파일(?)들의 출력용 파일명앞 프로필입니다.
파일명의 날짜를 처리하던 과정에서,
특정 파일은 날짜가 UTC (세계표준시.. 아마도..) 로 맞춰져 있는 경우가 보여서요..
처리방법을 번호로 매겨놓지 않고, 따로 처리했습니다. ( from otherGetter )
..
6)
lineGetter 에 /.../g 가 왜 붙어있나..싶더니,
떼놓고 하면 프로그램 멈추더라구요.. v 처리를 따로 하지 않은 까닭이겠죠.
..
wantHate killofki@.
카메라앱을 자주 사용하다보니,
나온 파일들을 일단, 시간순서대로 엮어야 할 필요성이 있더라구요.
1)
문제는, 앱마다 파일 고유(?)의 날짜 특성이 있어서요,
그런 문제를 해결하기 위해 만들어봤습니다.
..
2)
<textarea id=x1_131209_1 style=width:300px;height:300px;overflow:auto; >
C 드라이브의 볼륨: Windows
볼륨 일련 번호: 2CFB-52A7
C:\Documents and Settings\xxxx\바탕 화면\사본 - 130509_1 (3) 디렉터리
2013-09-23 오후 07:16 <DIR> .
2013-09-23 오후 07:16 <DIR> ..
2013-05-09 오후 11:52 386,438 09-05-2013 11.12.47.jpg
2013-05-09 오후 11:48 1,367,483 2013-05-09_18-56-47_HDR.jpg
2013-05-09 오후 11:48 1,105,082 2013-05-09_18-58-00_HDR.jpg
2013-05-09 오후 11:48 421,363 2013-05-09_19-14-40_Night.jpg
2013-05-09 오후 11:48 1,009,763 2013-05-09_19-38-40_HDR.jpg
2013-05-09 오후 11:48 547,616 2013-05-09_19-39-49_Night.jpg
2013-05-09 오후 11:48 1,031,007 2013-05-09_19-51-38_HDR.jpg
2013-05-13 오후 03:18 1,408,516 2013-05-10_16-21-48_HDR.jpg
2013-09-23 오후 07:16 0 d.txt
2013-05-09 오후 11:48 293,980 PANO_20130509_200953.jpg
2013-05-09 오후 11:48 246,804 PANO_20130509_201102.jpg
11개 파일 7,818,052 바이트
2개 디렉터리 30,259,392,512 바이트 남음
</textarea>
<textarea id=x2_131209_1 style=width:300px;height:300px;overflow:auto; onclick="execCommand('selectAll');execCommand('copy');" ></textarea>
<script>
(function(){
function $(v) {
var ov=document.getElementById(v);
return ov?ov:document.getElementByName(v);
}
var
x1=$('x1_131209_1')
, x2=$('x2_131209_1')
, lineGetter=/[^\n\r]+/g
, lv, nlv
, nameOther=/(\d{4})-(\d\d)-(\d\d)\s\s오(전|후)\s(\d\d):(\d\d)\s+([\d,]+)\s+(?!\d{8}-\d{6}_)([^\s][^\n\r]*)/i
, nameGetters=[
/^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_HDR\.jpg$/i
, /^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_Night\.jpg$/i
, /^PANO_(\d{8})_(\d{6})\.jpg$/i
]
, otherGetter=
/^(\d\d)-(\d\d)-(\d{4})\s(\d\d)\.(\d\d)\.(\d\d)\.jpg$/i
// '$3$2$1-$4$5$6_'
, nameDates=[
'$1$2$3-$4$5$6_'
, '$1$2$3-$4$5$6_'
, '$1-$2_'
]
, nv, np, hv, nf
, sc=/\s/
, ddv=new Date()
;
function two(v) {
v+='';
while (v.length<2) v='0'+v;
return v;
}
String.prototype.replaceAll=function() {
var ar=arguments, arl=ar.length, ov=this;
for (i=0; i<arl; i+=2) {
ov=ov.replace(ar[i], ar[i+1]);
}
return ov;
}
x1.onclick=function(evt){
var
ev=evt?evt:window.event
, v=ev.srcElement.innerText;
;
var ov='';
while (lv=lineGetter.exec(v)) {
nf='';
nlv=lv[0];
if (nv=nameOther.exec(lv[0])) {
hv=((nv[4]=='전'?0:12)+(nv[5]%12))+'';
if (hv.length<2) hv='0'+hv;
if (nv[8]!='.')
if (nv[8]!='..')
if (nv[8]!='d.txt')
nf=nv[1]+nv[2]+nv[3]+'-'+hv+nv[6]+'00_'+nv[8];
nlv=nv[8];
}
for (np=0; np<nameGetters.length; np++) {
if (nv=nameGetters[np].exec(nlv)) {
nf=nv[0].replace(nameGetters[np], nameDates[np])+nv[0];
break;
}
}
if (np==nameGetters.length) { // UTC 파일 기준..
if (nv=otherGetter.exec(nlv)) {
ddv.setUTCFullYear(nv[3]);
ddv.setUTCMonth(nv[2]-1);
ddv.setUTCDate(nv[1]);
ddv.setUTCHours(nv[4]);
ddv.setUTCMinutes(nv[5]);
ddv.setUTCSeconds(nv[6]);
ddv.setUTCMilliseconds(0);
nf='{y}{m}{d}-{H}{M}{S}_'.replaceAll(
/{y}/, ddv.getFullYear()
, /{m}/, two(ddv.getMonth()+1)
, /{d}/, ddv.getDate()
, /{H}/, ddv.getHours()
, /{M}/, ddv.getMinutes()
, /{S}/, ddv.getSeconds()
)+nlv;
}
}
if (nf) {
if (sc.exec(nlv)) nlv='"'+nlv+'"';
if (sc.exec(nf)) nf='"'+nf+'"';
ov+=nf?'ren '+nlv+' '+nf+'\r\n':'';
}
}
x2.innerText=ov;
};
})();
</script>
-- 새 창에 샘플 보여주기.. --
..
3)
..
4)
디렉토리 리스트를 dir로 뽑은 내용을 첫번째 textarea 에 넣고 클릭하면,
해당 내용들에서 촬영시각정보를 추출해서
이름변환용 MS-DOS batch 파일 내용을 만들어
두번째 textarea 에 출력한다..는 내용입니다.
..
5)
lv 는 라인입력기이고, ( from lineGetter )
nf 는 변환될 파일명,
nameOther 는 해당 파일의 날짜프로필 추출용이고,
nameGetter 는 특정파일(?)들의 파일명프로필,
nameDates 는 특정파일(?)들의 출력용 파일명앞 프로필입니다.
파일명의 날짜를 처리하던 과정에서,
특정 파일은 날짜가 UTC (세계표준시.. 아마도..) 로 맞춰져 있는 경우가 보여서요..
처리방법을 번호로 매겨놓지 않고, 따로 처리했습니다. ( from otherGetter )
..
6)
lineGetter 에 /.../g 가 왜 붙어있나..싶더니,
떼놓고 하면 프로그램 멈추더라구요.. v 처리를 따로 하지 않은 까닭이겠죠.
..
wantHate killofki@.
'string' 카테고리의 다른 글
html구조]..를 단순화해봤습니다. (0) | 2013.12.06 |
---|---|
inc] 스트링 값을 덧셈해봅니다. (0) | 2013.11.28 |
stringrReplaceAll ver2] 기능을 살짝 추가해봤습니다. (0) | 2013.09.17 |
string to array] 부스번호 리스트 만들기.. (0) | 2013.06.09 |
RegExp] 태그 범위를 받아봅니다. (0) | 2013.06.06 |