SQLの窓

2014年02月27日

テキストエリアに入れた JSON データをチェックするコード(F12等の開発者ツールも使う) / JSON.stringify と JSON.parse

事前に JSON 文字列をテキストエリアにセットしていますが、置き換えて使用します。( そのままでもテストできます )
もう一つのテキストエリアには、一旦 JSON 化したオブジェクトをタブで整形して再度出力しています。この際、一旦内部文字列に変換されるので、\u7d75\u3092 というような文字列は元に戻って読めるようになります。


▼ HTML と JavaScript
<input type="button" value="console.dir で出力(F12等でデベロッパーツールを開いておいて下さい)" onclick='console.dir(JSON.parse(document.getElementById("json_data").value))'><br><textarea id="json_data" style='width:600px;height:500px;'>{
    "id": 91500526,
    "simple_array": [1,2,3,4,5],
    "object_array": [
        {"high":1,"middle":2,"low":3},
        {"high":4,"middle":5,"low":6},
        {"high":71,"middle":81,"low":91}
    ],
    "profile_background_tile": false,
    "notifications": false,
    "profile_sidebar_fill_color": "FFF7CC",
    "location": "\u5927\u962a\u5e9c",
    "screen_name": "sworc",
    "profile_image_url": "http:\/\/a0.twimg.com\/profile_images\/2388651010\/zmq5cwm5nsvngpfrtr3f_normal.png",
    "contributors_enabled": false,
    "utc_offset": 32400,
    "time_zone": "Osaka",
    "is_translator": false,
    "default_profile": false,
    "profile_background_color": "000000",
    "name": "night w\u00e1lker",
    "geo_enabled": false,
    "lang": "ja",
    "protected": true,
    "profile_background_image_url": "http:\/\/a0.twimg.com\/profile_background_images\/59645045\/bbs_img_4598c0b36c78d.jpg",
    "id_str": "91500526",
    "listed_count": 6,
    "profile_link_color": "FF0000",
    "follow_request_sent": false,
    "description": "\u7d75\u3092\u63cf\u304f\u30d7\u30ed\u30b0\u30e9\u30de\u3002\u597d\u304d\u306a\u98df\u3079\u7269\u306f\u6c34\u9903\u5b50\u3002\u624b\u66f8\u304d\u30d6\u30ed\u30b0\u3002DAZ3D\u3002GIMP\u3002Three.js\u3002\u30d5\u30ea\u30fc\u30d5\u30a9\u30f3\u30c8\u3067\u7c21\u5358\u30ed\u30b4\u4f5c\u6210\u3000http:\/\/lightbox.on.coocan.jp\/html\/fontImage.php http:\/\/goo.gl\/HDqTM",
    "profile_use_background_image": true,
    "following": false,
    "profile_text_color": "0C3E53",
    "url": "http:\/\/winofsql.jp\/",
    "friends_count": 25,
    "profile_background_image_url_https": "https:\/\/si0.twimg.com\/profile_background_images\/59645045\/bbs_img_4598c0b36c78d.jpg",
    "created_at": "Sat Nov 21 04:24:25 +0000 2009",
    "default_profile_image": false,
    "profile_sidebar_border_color": "F2E195",
    "verified": false,
    "status": {
        "in_reply_to_status_id_str": null,
        "geo": null,
        "place": null,
        "created_at": "Sun Sep 23 16:49:33 +0000 2012",
        "in_reply_to_user_id_str": null,
        "retweeted": false,
        "in_reply_to_screen_name": null,
        "truncated": false,
        "possibly_sensitive_editable": true,
        "possibly_sensitive": false,
        "id_str": "249913404016427008",
        "contributors": null,
        "in_reply_to_status_id": null,
        "in_reply_to_user_id": null,
        "favorited": false,
        "source": "\u003Ca href=\"http:\/\/winofsql.jp\/\" rel=\"nofollow\"\u003ETwitLink\u003C\/a\u003E",
        "coordinates": null,
        "id": 249913404016427008,
        "retweet_count": 0,
        "text": "\u5bb6\u306b\u6301\u3061\u5e30\u3063\u305f mdb \u3067\u7c21\u5358\u306b php \u304b\u3089\u30a2\u30af\u30bb\u30b9\u3057\u3066\u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u308b( DB\u30af\u30e9\u30b9\u4ed8\u304d ) http:\/\/t.co\/bDzKDGLY"
    },
    "favourites_count": 1,
    "statuses_count": 6120,
    "profile_image_url_https": "https:\/\/si0.twimg.com\/profile_images\/2388651010\/zmq5cwm5nsvngpfrtr3f_normal.png",
    "followers_count": 55
}</textarea>

<input type="button" value="JSON化した内部文字列をタブで整形します" onclick='document.getElementById("json_result").value=JSON.stringify( JSON.parse(document.getElementById("json_data").value),null,"\t" )'><br><textarea id="json_result" style='width:600px;height:500px;'></textarea>


posted by at 2014-02-27 00:21 | JavaScript | このブログの読者になる | 更新情報をチェックする

2014年02月25日

VBScript : ディレクトリ内のディレクトリで使用している容量一覧

▼ このように実行されます
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

C:\adt\sdk

          0.000 M : add-ons
          0.000 M : build-tools
          2.419 M : extras
          4.048 M : platform-tools
         73.800 M : platforms
        219.770 M : system-images
          0.000 M : temp
        141.507 M : tools

        442.262 M : 合計
          0.715 M : C:\adt\sdk のみのサイズ

続行するには何かキーを押してください . . .
Set WshShell = CreateObject( "WScript.Shell" )
Set Shell = CreateObject( "Shell.Application" )
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' Cscript の pause 付きで実行
if Wscript.Arguments.Count = 0 then
	Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(WScript.ScriptFullName) & " next" & " & pause", 3 )
	Wscript.Quit
end if

Dim target

' **********************************************************
' 対象ディレクトリ
' **********************************************************
target = SelectDir( "対象フォルダを選択して下さい" )
if target = "" then
	Wscript.Quit
end if

Wscript.Echo target
Wscript.Echo

' **********************************************************
' フォルダオブジェクト取得
' **********************************************************
Set objFolder =  Fso.GetFolder(target)

' **********************************************************
' サブフォルダコレクション取得
' **********************************************************
Set colSubFolder =  objFolder.SubFolders

' **********************************************************
' 一覧
' **********************************************************
Dim TargetSize : TargetSize = 0
For Each obj in colSubFolder

	on error resume next
	Wscript.Echo Lpad(FormatNumber((Fix(obj.Size / 1000) / 1000),3)," ", 15) & " M : " & obj.Name
	if Err.Number <> 0 then
		Wscript.Echo "( " & obj.Name & " : 処理できません )"
	end if
	TargetSize = TargetSize + obj.Size
	on error goto 0


Next

Wscript.Echo

Dim AllSize
on error resume next
AllSize = objFolder.Size
if Err.Number <> 0 then
	AllSize	= TargetSize
end if
on error goto 0


Wscript.Echo Lpad(FormatNumber((Fix(AllSize / 1000) / 1000),3)," ", 15) & " M : " & "合計"
Wscript.Echo Lpad(FormatNumber((Fix((AllSize-TargetSize) / 1000) / 1000),3)," ", 15) & " M : " & target & " のみのサイズ"

Wscript.Echo

' **********************************************************
' ディレクトリ選択
' **********************************************************
Function SelectDir( strTitle )

	Dim obj

	Set obj = Shell.BrowseForFolder( 0, strTitle, &H4B, 0 )
	if obj is nothing then
		SelectDir = ""
		Exit Function
	end if
	if not obj.Self.IsFileSystem then
		ErrorMessage = "ファイルシステムではありません"
		SelectDir = ""
		Exit Function
	end if

	SelectDir = obj.Self.Path

End Function

' **********************************************************
' ダブルクォートで囲む
' **********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function

' **********************************************************
' 指定数、指定文字列左側を埋める
' **********************************************************
Function Lpad( strValue, str, nLen )

	Lpad = Right( String(nLen,str) & strValue, nLen )

End Function

Windows の都合で読み込めないフォルダむはメッセージを表示して読み飛ばしています。その場合、合計に反映されないのてで注意して下さい


posted by at 2014-02-25 16:53 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年02月20日

バッチファイル : クリップボードからデータを読み込んで表示

クリップボードのデータを読み込んでいるのは、mshta.exe の引数内の VBScript のコードです。

clipboardData オブジェクトの getData メソッドで読み込んで、それをコマンドプロンプトの世界へ戻す為に標準出力に書き込んでいます。

コマンドプロンプトの世界でそれを取り出すには、標準入力を読み込む事のできるコマンドが必要なのですが、通常コマンドでは more か sort くらいしか無いので 2 行目で テンポラリフォルダに VBScript のコードを出力しています。その VBScript のコードを cscript //nologo で読み込んで使用しています(//nologo は、cscript が標準出力になにみ出力しないようにする為のもの)。この結果、標準入力に渡ったデータをパイプ経由で入力して、Wscript.Echo で表示しています。

mshta.exe は、本来 hta アプリケーションを実行させるものですが、引数の使用が URL なので、URL と同等の vbscript: で直接処理を実行させています。

2 行目では、 cmd.exe /c "" という構文で、"" の中にコマンド一式を記述する事によって、特殊記号のエスケープの問題が出ないように考慮しています。
@echo off
cmd.exe /c "echo Dim Input:Input="":Do While Not WScript.StdIn.AtEndOfStream:Input=Input^&WScript.StdIn.ReadAll:Loop:WScript.Echo Input > %temp%\_.vbs"
mshta.exe "vbscript:Execute("str=window.clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")" | cscript //nologo %temp%\_.vbs



posted by at 2014-02-20 23:58 | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする

2014年02月18日

バッチ処理の為の .wsf スケルトン

スクリプトにデータを含めて、コマンドプロンプトからの実行を強制しています( コマンドプロンプトから、cscript.exe を使用しないと Quit されます )
<JOB>
<SCRIPT language="VBScript">

' コマンドプロンプトより起動される為の処理
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	strMessage = "コマンドプロンプトより cscript " & WScript.ScriptFullName
	strMessage = strMessage & " と指定して実行して下さい   " & vbCrLf & vbCrLf
	strMessage = strMessage & "( この文字列をクリップボードにコピーした場合は"
	strMessage = strMessage & "ctrl+c です )"
	WScript.Echo strMessage
	WScript.Quit
end if

aData = Split( getResource("myText"), vbCrLf )
For I = 0 to Ubound( aData )
	if Trim( aData(I) ) <> "" then
		Wscript.Echo aData(I)
	end if
Next

</SCRIPT>

<RESOURCE id="myText">
コード名称マスタ
商品マスタ
得意先マスタ
社員マスタ
取引データ
</RESOURCE>
</JOB>

以下はオンラインのライブラリを使って、cscript.exe で再度実行しています( 最後にコマンドプロンプトの pause で停止 )
<JOB>
<SCRIPT language="VBScript" src="http://homepage2.nifty.com/lightbox/laylaClass.vbs"></SCRIPT>
<SCRIPT language="VBScript">
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://homepage2.nifty.com/lightbox/" )
Call laylaLoadFunction( "baseFunction.vbs" )

Crun()

aData = Split( getResource("myText"), vbCrLf )
For I = 0 to Ubound( aData )
	if Trim( aData(I) ) <> "" then
		Wscript.Echo aData(I)
	end if
Next

</SCRIPT>

<RESOURCE id="myText">
コード名称マスタ
商品マスタ
得意先マスタ
社員マスタ
取引データ
</RESOURCE>
</JOB>


上記内容をオンラインなしで実行するには、以下のようになります
<JOB>
<SCRIPT language="VBScript">

' コマンドプロンプトより起動される為の処理
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = Wscript.CreateObject("WScript.Shell")
	strParam = " "
	For I = 0 to Wscript.Arguments.Count - 1
		if instr(Wscript.Arguments(I), " ") < 1 then
			strParam = strParam & Wscript.Arguments(I) & " "
		else
			strParam = strParam & """" & Wscript.Arguments(I) & """ "
		end if
	Next
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """" & strParam & " & pause", 3 )
	WScript.Quit
end if

aData = Split( getResource("myText"), vbCrLf )
For I = 0 to Ubound( aData )
	if Trim( aData(I) ) <> "" then
		Wscript.Echo aData(I)
	end if
Next

</SCRIPT>

<RESOURCE id="myText">
コード名称マスタ
商品マスタ
得意先マスタ
社員マスタ
取引データ
</RESOURCE>
</JOB>




posted by at 2014-02-18 12:32 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年02月14日

エレメント(主にPRE)を選択状態にする

HTMLやスクリプトでできた部品を埋め込む為に、クリップボードを利用する場合、一般的には テキストエリアにコードを表示させて、ユーザがクリップボードを使いやすいようにするのがコード提供側で最も簡単な方法です。textarea に対して、select メソッドを実行するだけなので、テキストエリアそのものに以下のように仕込むだけです

<textarea onclick="this.select();">この文字列を選択</textarea>
しかし、選択肢としては汎用性を持たせる為に、PRE 要素内を使用するのもいいかと思います。正攻法で実装すると少し面倒ですが、jQuery を使うと汎用性も出て来ます。
エレメント(ここでは PRE)を選択状態にする
ここを選択します
ここの文字列は、CSS の設定によって改行コードを挿入しなくても、自動的に折り返すようになっています。また、overflow: hidden; によって、選択状態を枠の中に納めています。さらに、CSS での効果もいろいろ期待できます。

▲ の正攻法の実装コード
<a
	href='javascript:void(0);'
	onclick='
		if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
			var s = document.selection;
			var range = s.createRange( );
			range.moveToElementText(document.getElementById("my_src"))
			range.select();
		}
		else {
			var s = window.getSelection();
			s.selectAllChildren(document.getElementById("my_src"));
		}
	'
>エレメント(ここでは PRE)を選択状態にする</a>
<style>
#my_src {
	white-space: pre;
	white-space: pre-wrap;
	white-space: -pre-wrap;
	white-space: -o-pre-wrap;
	white-space: -moz-pre-wrap;
	white-space: -hp-pre-wrap;
	word-wrap: break-word;
	overflow: hidden;
	border-radius: 10px;
	box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
</style>
<pre id="my_src" style="width:400px;border: 1px solid #000000;padding:10px;">
ここを選択します
</pre>

indexOf("microsoft") > -1 に関しては、IE10 までの対応です。IE11 からは下のほうの処理が実行されます( 元々この処理方法は、Microsodt 製品内で行っていたので、それにあわせて IE11 での仕様変更で microsoft の文字列がなくなっており、選択処理の仕様も他のブラウザと同じになりました )

以下のように jQuery を使うと若干記述が簡潔になります。
jQueryで選択状態にする
ここを選択します
ここの文字列は、CSS の設定によって改行コードを挿入しなくても、自動的に折り返すようになっています。また、overflow: hidden; によって、選択状態を枠の中に納めています。さらに、CSS での効果もいろいろ期待できます。
<style>
#my_src2 {
	white-space: pre;
	white-space: pre-wrap;
	white-space: -pre-wrap;
	white-space: -o-pre-wrap;
	white-space: -moz-pre-wrap;
	white-space: -hp-pre-wrap;
	word-wrap: break-word;
	overflow: hidden;
	border-radius: 10px;
	box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
</style>

<script>
if ( !window.jQuery ) {
	document.write("<"+"script src=\"//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js\"></"+"script>");
}
</script>
<script>
$(function(){
	$("#click_text").click(function(){
		if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
			var s = document.selection;
			var range = s.createRange();
			range.moveToElementText($("#my_src2")[0]);
			range.select();
		}
		else {
			var s = window.getSelection();
			s.selectAllChildren($("#my_src2")[0]);
		}
	}).css({ cursor: "pointer", textDecoration: "underline" });
});
</script>

<span id="click_text">jQueryで選択状態にする</span>
<pre id="my_src2" style="width:200px;border: 1px solid #000000;padding:10px;">
ここを選択します
ここの文字列は、CSS の設定によって改行コードを挿入しなくても、自動的に折り返すようになっています。また、overflow: hidden; によって、<strong><span style="color:#CB0032;">選択状態を枠の中に納めています。</span></strong>さらに、CSS での効果もいろいろ期待できます。
</pre>



posted by at 2014-02-14 21:50 | JavaScript | このブログの読者になる | 更新情報をチェックする

2014年02月05日

Windows 8.1 + Visual Studio 2013 + WebGL + Three.js v65

いろいろ調べても見つけられなかったので、自分で確かめました。

このテストでは、Three.js の v65 を使用していますが、Windows8.1 で使うにあたって、OrbitControls がちらつくようになっていたので、v57 と比べて少し変更してちらつかずに視点変更をできるようにしました 



▼ テストに使った内容
Three.js : WebGL限定の Cube テクスチャによる『パノラマ背景』



posted by at 2014-02-05 15:44 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX