« 2014年05月 | メイン | 2015年12月 »

2015年03月 アーカイブ

2015年03月22日

javascript連想配列
[ Tips ]

javascriptの連想配列は使い方次第で楽が出来ます。
test.jseというテキストを作ってみます。

var area = {
"北陸":{
"新潟県":{
"新潟市":"県庁所在地",
"長岡市":"中越地区",
"上越市":"上越地区"
},
"富山県":{
"富山市 ":"県庁所在地"
},
"石川県":{
"金沢市 ":"県庁所在地"
},
"福井県":{
"福井市 ":"県庁所在地"
}
}
}
var data1 = "北陸";
var data2 = "新潟県";
var data3 = "上越市";

WScript.echo(area[data1][data2][data3]);


やりたい事のイメージとして、北陸の県庁所在地を与えると、県庁所在地である事が分かり、(データは全ては登録していませんが、上越市の様に市町村を登録したとして)それ以外の市町村名を与えると、地区名が返るというものです。

さて、これを実行すると、
area1.png
と、意図した結果が表示されます。
では、

var data1 = "関東";
var data2 = "東京都";
var data3 = "八王子市";

として実行してみると、
area2.png
と言うように「NULLまたはオブジェクトではありません」というエラーが表示されてしまいます。
では、次に新潟県に登録されていない妙高市を指定すると、
var data1 = "北陸";
var data2 = "新潟県";
var data3 = "妙高市";

これを実行すると、
area3.png
とNULLが表示されます。

…と、言う事で、連想配列で2階層以上下の階層で、存在しないものを指定するとエラーとなります。
1階層のみであれば、直接指定してもNULLが返るので、1階層毎にNULLかどうかを判定し、NULLでなければ、次の階層の値を与えて判定するというやり方が正しいのでしょうか。

以上、何故エラーとなるのか、少々悩んだ事柄でしたので、まとめておきます。

Posted by りじんぐ at 21:33

2015年03月13日

一覧テキストからファイル名を変更するスクリプト
[ Tips ]

「拡張子MP3のファイルで連番で始まるものの一覧を作成するスクリプト」と対になる様なスクリプトです。
 01 aaa
 02 bbb
と言った一覧テキストから、実際のファイル名が
 01 xxx.mp3
 02 yyy.mp3
となっているものをテキストに沿ってリネームするためのスクリプトです。
頭に連番を付けて、拡張子はmp3にしておいてください。

一覧テキストを「xxx.txt」とし、mp3のあるフォルダに一覧テキストとこのスクリプトを入れて、スクリプトを実行してください。

だって、アレだよ、文字化けしているんだもん!ってな時に使うためのものです。
JSEスクリプトですので、「xxx.jse」の様に保存してください。


//-------------------------------------------------------------------
// 一覧ファイルによりリネームするプログラム (ファイル名: renameMp3.jse)
//-------------------------------------------------------------------
//定数の宣言
var ForReading = 1; //読み込み
var ForWriting = 2; //書きこみ(上書きモード)
var ForAppending = 8; //書きこみ(追記モード)

// for debug
function debugwrite(tmpstr){
var debugfso = new ActiveXObject("Scripting.FileSystemObject");
var MyFile = fso.OpenTextFile("d:\\debugfile.txt", ForAppending);
MyFile.WriteLine(tmpstr);
MyFile.Close();
}

// 変数の初期化など
var fso = WScript.CreateObject("Scripting.FileSystemObject");

// ファイルを1つずつ処理する
var dir = fso.GetFolder(".");
var files = new Enumerator(dir.Files);
while (files.atEnd() == false) {
var tmpPath = files.item().path;
var tmpStr = tmpPath.substr((tmpPath.length - 3),3);
if ( tmpStr == "txt" ) {
fileRead(tmpPath);
}
files.moveNext();
}


function fileRead(strFilePath){
// ファイルのオープン(読み込みで開く)
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var objInFile = objFileSys.OpenTextFile(strFilePath,ForReading);

// ファイルのオープンが成功(ファイル有り)のときに実行
// ファイルの内容を全部読み終えるまでループ
var i = 1;
do {
// ファイルの内容を1行ずつ読み込む
var strRecord = objInFile.ReadLine();

if ( i < 10 ) {
var trackNo = "0" + i;
} else {
var trackNo = i;
}
var strHead = strRecord.substr(0,2);
var strHead3 = strRecord.substr(2,1);
if ((strHead == trackNo) && (isNaN(strHead3) || strHead3 == " ") ) {
// 読み込んだ内容をコンソールへ表示
if ( strHead3 == " " || strHead3 == "." ) {
var mp3FileName = strRecord.substr(3,(strRecord.length - 3));
} else {
var mp3FileName = strRecord.substr(2,(strRecord.length - 2));
}
mp3FileName = eraseSpace (mp3FileName);
mp3FileName = eraseBackSpace (mp3FileName);
renameMp3(trackNo, mp3FileName);
i++;
}

} while(objInFile.AtEndOfStream==false);
objInFile.Close();
}

function eraseSpace(strFileName) {
if ( strFileName.substr(0,1) == " " ) {
var tmpStr = strFileName.substr(1,(strFileName.length - 1))
var returnStr = eraseSpace(tmpStr);
return returnStr;
} else {
return strFileName;
}
}

function eraseBackSpace(strFileName) {
if ( strFileName.substr(strFileName.length-1,1) == " " ) {
var tmpStr = strFileName.substr(0,(strFileName.length - 1))
var returnStr = eraseBackSpace(tmpStr);
return returnStr;
} else {
return strFileName;
}
}

function renameMp3(trackNo, mp3FileName){
var dir = fso.GetFolder(".");
var files = new Enumerator(dir.Files);
mp3FileName = mp3FileName.replace(/\//g,"/");
mp3FileName = mp3FileName.replace(/\"/g,"”");
mp3FileName = mp3FileName.replace(/\\/g,"¥");
mp3FileName = mp3FileName.replace(/\*/g,"*");
mp3FileName = mp3FileName.replace(/\?/g,"?");
mp3FileName = mp3FileName.replace(/ mp3FileName = mp3FileName.replace(/>/g,">");
mp3FileName = mp3FileName.replace(/:/g,":");
mp3FileName = mp3FileName.replace(/\|/g,"|");
while (files.atEnd() == false) {
var tmpName = files.item().name;
var tmpStr = tmpName.substr(0,2);
if ( tmpStr == trackNo ) {
var newname = files.item().ParentFolder + "\\" + trackNo + "." + mp3FileName + ".mp3";
files.item().Move(newname);
break;
}
files.moveNext();
}
}


Posted by りじんぐ at 06:35

2015年03月10日

拡張子MP3のファイルで連番で始まるものの一覧を作成するスクリプト
[ Tips ]

まあ、とある目的で作ったものですが、公開しておきます。
拡張子がMP3となっているもので、01から連番で始まるファイルの一覧テキストを作成するプログラムです。
mp3と同じフォルダに入れてダブルクリックしてください。同一フォルダに「xxx.txt」というファイルが作成されます。
JSEスクリプトですので、「xxx.jse」の様に保存してください。


//-------------------------------------------------------------------
// 拡張子MP3ファイルのリストを作成するプログラム (ファイル名: dirList.jse)
//-------------------------------------------------------------------
// 変数の初期化など
var fso = WScript.CreateObject("Scripting.FileSystemObject");

// ファイルを1つずつ処理する
var dir = fso.GetFolder(".");
var files = new Enumerator(dir.Files);
var data = new Array();
var maxIndex = 0;
while (files.atEnd() == false) {
var tmpPath = files.item().path;
var tmpStr = tmpPath.substr((tmpPath.length - 3),3);
if ( tmpStr == "mp3" ) {
// WScript.echo(files.item().name);
var filename = files.item().name;
if(isNaN(filename.substr(0,2))){
if(isNaN(filename.substr(0,1))){
filename = "";
} else {
filename = "0" + filename.substr(0,filename.length - 4);
}
} else {
if(isNaN(filename.substr(1,1))){
filename = "0" + filename.substr(0,filename.length - 4);
} else if (filename.substr(1,1) == " ") {
filename = "0" + filename.substr(0,filename.length - 4);
} else {
filename = filename.substr(0,filename.length - 4);
}
}
if (filename != "") {
var index = filename.substr(0,2);
index = index - 0;
data[index] = filename;
if ( maxIndex < index ) { maxIndex = index; }
}
}
files.moveNext();
}
output(data,maxIndex);


function output(data,maxIndex){
var strDir = scriptDir();
var DirIndex = strDir.lastIndexOf("\\");
var DirName = strDir.substr(DirIndex + 1,strDir.length - DirIndex);
var resultFile = strDir + "\\" + DirName + ".txt"; // 結果ファイル
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.CreateTextFile(resultFile, true, true);

for ( i = 0; i <= maxIndex; i++) {
if ( data[i] === undefined ) {
} else {
f.Write(data[i]+"\r\n");
}
}
f.Close();
}
function scriptDir() {
var fso = WScript.CreateObject("Scripting.FileSystemObject");
return fso.GetFile(WScript.ScriptFullName).ParentFolder.Path;
}


Posted by りじんぐ at 06:25

About 2015年03月

2015年03月にブログ「くーそーしてからねてください」に投稿されたすべてのエントリーです。新しい順に並んでいます。

前のアーカイブは2014年05月です。

次のアーカイブは2015年12月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type