タグ:js ( 7 ) タグの人気記事

勉強会の予習を。

渋谷珈琲研究所

会社のブログにも書いたけど、2週間に一度の読書会をしていて、そのための予習をしなければ...と思いつつも、平行して違う勉強会の予習にとりかかってしまいました。

そっちの方はうちの会社から仕事していただいてる方に講師をつとめてもらってHey, Scripting Guy! ‐ 基本スクリプトを題材にしたこっちも読書会というか勉強会のようなもの。

前回テキスト ファイル内の文字数を数える方法はありますかというのをやったんだけど、本当は講師役の方にもっとスキルアップしてほしいという思惑があって次回までの宿題で

「文字数を数える時に大文字のみカウントする方法は?」

という無茶ぶりしてみました。自分でお題をふっといた手前ある程度サンプルを考えとかないと行けないよねーと思ったので、まずはキモになる大文字のみカウントする部分だけ考えました

var textline = "It's strange! It's amazing! It's wonderful! New!"
var RegEx = textline.match(/[A-Z]/g); // I,I,I,Nの文字がマッチする
WScript.Echo(RegEx.length); //配列RegExの長さを取得すればOK

Hey, Scripting Guy!はVBScriptがベースなんだけど、自分はずっとJavaScript(JScript)勉強しているのであえてこっちで書きました。
[PR]
by h5y1m141 | 2009-07-30 20:45

JScriptメモ

会社の同じチームの人が最近、色々とやる気になっていて、この間買ったAjaxの本を見せてもらったら、結構いい感じの内容だったので、その本のサンプルにあったものをそのままJScript化(っていってもほとんど本のサンプルと変わらないんだけどね・・)

function Book(title, price, isbn){
this.title = title;
this.price = price;
this.isbn = isbn;
}

Book.prototype.tax = 1.05;
Book.prototype.amazonURL =
" http://www.amazon.co.jp/exec/obidos/ASIN/";
Book.prototype.withTax = function() {
return this.price * this.tax;
};
Book.prototype.makeAmazonURL = function(){
return "<a href=\"" + this.amazonURL + this.isbn + "\">"
+this.title + "<\/a>";
}

books = new Array();
books[0] = new Book("できるHTML入門",1580,"4844319302");
books[1] = new Book(" Web2.0入門",1800,"4844322265");

var enumItems = new Enumerator(books);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objBook = enumItems.item();
WScript.Echo(objBook.makeAmazonURL ()+"金額" + objBook.withTax())
}

[PR]
by h5y1m141 | 2007-01-27 18:29

JScript でExping もどき

未読になっていたネットワーク関連のブログを何気なくチェックしていて、ネットワークエンジニアに成るさんのネットワークのリモート監視と操作と現場マンというエントリーで
こういうときはツールに頼ればいい。
ネットワークやっている人なら必ず触ると思われる
Expingでpingを連続で打ち続けていた。
とあって、Expingに頼らないで、JScriptで、書けるかなぁと思ってちょっとチャレンジしてみて、作成約1時間ほどかかったけどできた!

こういう地道な作業に対しては、Windows系ならVBScript、Unix/Linux系ならPerlやRubyや最近だとPythonとかになるだろうけど、いづれにしても、1つ得意なのを知っておくと、いざっていうときに、色々と応用がきくかなぁと。

下記がサンプルコードです。(IPアドレス羅列してるから本当はこの部分はテキストファイルとかから読み込ませるようにしたほうが処理的には綺麗だと思うけど、とりあえずということで)

コマンドラインで実行するとこんな感じでループしつづける
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED

ここからソースコード

do {
var h;
h = checkHours();
var IP1="192.168.1.1";
var IP2="192.168.1.2";
exPing(IP1);
exPing(IP2);
/*
ループしつづけるとCPU使用率上がるので
待ってから処理を行う。1000だと1秒
*/

WScript.Sleep (1000);
} while(h<24);

function checkHours() {
var currentTime,currentHours;
currentTime = new Date();
currentHours = currentTime.getHours();
return(currentHours);
}

function exPing(IPAddress) {
var objShell = new ActiveXObject("WScript.Shell");
var objExecObject = objShell.Exec
("%comspec% /c ping -n 1 -w 1000 " + IPAddress);

do {
var strText = objExecObject.StdOut.ReadAll()
/*
search メソッドでPingの実行結果にReplyが含まれるかどうか
確認。一致する文字列が見つらない場合には-1が返るためその数値を
条件判定式で利用
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/js56jsmthsearch.asp
*/
var reg = /Reply/i;
if(strText.search(reg)>0) {
WScript.Echo(IPAddress + "-->REPLY RECEIVED");
} else {
WScript.Echo(IPAddress + "-->NO REPLY RECEIVED");
}
} while(!objExecObject.StdOut.AtEndOfStream);
return null;
}

[PR]
by h5y1m141 | 2006-11-14 22:41

また、JScriptネタ

ここんところ、ずっとJScriptネタばっかりだけど、今まで会社でつかっていたツール類を作り直しているんだけどADOのRecordSetのデータ取得方法で高速なやり方というのをここで知ったんだけど、なんかいまいちわかんなかったんだけど、さっきやっとわかった。

以下はDBにMySQL使っているけど、DB変わってもちょっと変更するだけで済むから自分用にメモ。


var objADO = new ActiveXObject("ADODB.Connection");
objADO.Open("dsn=
MySQL;uid=xxxx;pwd=xxxx");
objADO.CursorLocation = 3;
var rs = objADO.Execute("SELECT * FROM 該当するテーブル名");

/*
getString メソッドは以下URLを参照した。
http://www.w3schools.com/ado/met_rs_getstring.asp
この場合には、カンマ区切りで表示をする
*/
var RSresult = rs.getString(2, 10000, ",", "\n", "NULL");
WScript.Echo(RSresult);

var nothing = rs.ActiveConnection;
objADO.Close();



ここんところ、JScript のコードを家帰ってから見ているうちに、だんだん見慣れてきたなぁ
[PR]
by h5y1m141 | 2006-09-13 22:50

JScript での配列とオブジェクトの列挙

MSDNのJScriptのページなどを参考にして配列とオブジェクトの使い方をちょっと勉強

/*
配列value1に10,11,12と値を格納して
配列の要素を全部表示
*/

var value1 = new Array(10,11,12);

for(var icount=0; icount < 3; icount++) {
WScript.Echo(value1[icount]);
}

/*
myObject というオブジェクトを生成して
そのオブジェクトのプロパティを表示
*/
var myObject = new Object();
myObject.name = "test";
myObject.age = "22";
myObject.phone = "00-0000-0000";

var tempProperty;
for (tempProperty in myObject) {
WScript.Echo(tempProperty + "\t" +
myObject[tempProperty]);
}


[PR]
by h5y1m141 | 2006-09-13 08:50

JScript 使ってインストールされているホットフィックスの一覧表示

これを見ながら、JScriptで、インストールされているホットフィックスの一覧を、hotfix.txt というファイルに書き出すスクリプト書いたけど、VBScriptと違う所が細かいけど結構あるから、なれないと書きづらいかも

var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
var colItems = objWMIService.ExecQuery(
"Select * from Win32_QuickFixEngineering",
"WQL",wbemFlagReturnImmediately |
wbemFlagForwardOnly);
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var objText = objFSO.CreateTextFile("c:\\hotfix.txt",true);
var enumItems = new Enumerator(colItems);
var HotFixID
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item();
HotFixID = HotFixID + objItem.ServicePackInEffect + "\n";
}
objText.WriteLine(HotFixID);
objText.Close();

[PR]
by h5y1m141 | 2006-09-11 20:44

一定時間毎に処理をする

今まで、会社のPCでタスクスケジューラーで、一定時間毎に定型処理をしていたんだけど、ちょっと諸事情により、タスクスケジューラー使えなくなったので、スクリプト書くことにしたんだけど、折角だから、今までみたく、VBScriptではなく、JScript で書いてみた。

完成形じゃないけど、こんな感じの処理だったら、一定時間毎に処理ができる

function checkHours() {
var currentTime,currentHours;
currentTime = new Date();
currentHours = currentTime.getHours();
return(currentHours);
}

function checkMinutes() {
var currentTime,currentMinutes;
currentTime = new Date();
currentMinutes = currentTime.getMinutes();
return(currentMinutes);
}

do {
var m,h;
h = checkHours();
m = checkMinutes();
if (m== 0) {
WScript.Echo ("処理A");
}
else {
WScript.Echo ("処理B");
}

/*
ループしつづけるとCPU使用率上がるので
待ってから処理を行う。30000だと30秒
*/

WScript.Sleep (30000);
} while(h<22);

[PR]
by h5y1m141 | 2006-09-06 21:25