SQLの窓 イラストAC フリー素材

2018年12月08日

【VBS汎用】SHIFT_JISデータを各種キャラクタセットのテキストファイルへ変換

Microsoft のデータはメモ帳でも解るように、SHIFT_JIS と Unicode と (UTF8) しか通常では対応していないので、このような処理が実は結構必要になります。

しかし、このような方法はたぶんあまり知られて無いので、他のアプリケーションを利用している場合が多いのでは無いでしょうか。(というか、そもそもファイルシステムオブジェクトで UTF8、UTF8N、EUC-JP を対応しろって思いますけど。)

変換は全てメモリ上で処理します。

外部ライブラリを WEB 上に置いて読み込んで処理しているので、その部分は『コマンド』だと思って下さい。
例) Crun は、コマンドプロンプトでの実行を強制します


VBScript の中に埋め込んだデータはファイルとしては Shift_JIS です。VBScript のインタープリタの内部的には Unicode ですが、何も考えなければ出力されたデータは Shift_JIS になってしまいます。

これを 5 種類のキャラクタセットとして意図的に出力します
1) SHIFT_JIS
2) UNICODE
3) EUC-JP
4) UTF8
5) UTF8N
※ UTF8 が少し特殊です(BOMを付加しています)
右端のアイコンよりダウンロードできます
<JOB>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )

' Csript.exe で実行を強制
Crun

' 元となる shift_jis の文字列
strShiftJis = GetInline("shift_jis")

' このディレクトリ
strDir = ScriptDir()

' ファイルシステムオブジェクト作成
GetFso

' 出力パス
strPath1 = strDir & "\sjis.txt"
strPath2 = strDir & "\unicode.txt"
strPath3 = strDir & "\ujis.txt"
strPath4 = strDir & "\utf8.txt"
strPath5 = strDir & "\utf8n.txt"

' ファイルシステムオブジェクトで、sjis と unicode
Call PutTextFile( strPath1, strShiftJis )
Call PutTextFileUnicode( strPath2, strShiftJis )

' キャラクタセット変換用の Stream オブジェクト
Set Stream = Wscript.CreateObject("ADODB.Stream")
Set Stream2 = Wscript.CreateObject("ADODB.Stream")

' 開く
Stream.Open
Stream2.Open
' 二つ目はバイナリ専用
Stream2.Type = 1

Stream.Charset = "euc-jp"
Stream.WriteText strShiftJis
Stream.SaveToFile strPath3, 2

' 先頭に移動
Stream.Position = 0
Stream.Charset = "utf-8"
Stream.WriteText strShiftJis
Stream.SaveToFile strPath4, 2

' バイナリにコピー
Stream.CopyTo Stream2

' 一つ目もバイナリにする為、いったん閉じる
Stream.Close
' 再度開いてバイナリにする
Stream.Open
Stream.Type = 1

' バイナリを読んでバイナリに書く
Stream2.Position = 0
Stream2.Read(3)
Do while not Stream2.EOS
	Stream.Write Stream2.Read(16)
Loop

' utn-8n
Stream.SaveToFile strPath5, 2


' 閉じる
Stream2.Close
Stream.Close


print "処理が終了しました"
print ""

Wscript.Quit

</SCRIPT>

<RESOURCE id="shift_jis">
<![CDATA[
ここは、VBScript なので shift_jis になります。
必要に応じてキャラクタセットを変更します
]]>
</RESOURCE>

</JOB>




【VBScriptの最新記事】
posted by at 2018-12-08 14:20 | VBScript | このブログの読者になる | 更新情報をチェックする

バッチ処理の為の .wsf スケルトン / cscript.exe での実行を強制する / 自分自身の呼び出し

Wscript.Echo は、Wscript.exe から実行すると、一回の処理毎にメッセージボックスを表示するので、連続処理する場合は避けなければなりません(wscript.exe をタスクマネージャから強制終了する事になります)

Wscript.exe は、通常エクスプローラからダブルクリックでスクリプトを実行した際に使用されるので、誤って実行してしまう事を避ける方法です。以下のサンプルでは、スクリプトにデータを含めて、そのデータをループ処理で表示する処理ですが、コマンドプロンプトからの実行を強制しています( コマンドプロンプトから、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>

以下はオンラインのライブラリの Crun と言う関数を使って、Wscript.exe で起動された場合は、cscript.exe で自分自身を呼び出して再度実行しています( 最後にコマンドプロンプトの pause で停止 )
右端のアイコンよりダウンロードできます
<JOB>
<COMMENT>
************************************************************
 WSH 実行スケルトン
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language="VBScript">
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
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 2018-12-08 13:52 | VBScript | このブログの読者になる | 更新情報をチェックする

VBScript : デスクトップの列挙

オンライン上にある、VBScript のライブラリを使用しています。
<JOB>
<COMMENT>
************************************************************
 WSH 実行スケルトン
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language="VBScript">
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )

GetShell

Crun2 130

Wscript.Echo "【デスクトップ/一般】"
Wscript.Echo "----------------------------------------------------"
Set objFolder = Shell.NameSpace( 0 )

Set objFolderItems = objFolder.Items()
nCount = objFolderItems.Count

' 列挙1
strData = ""
For i = 0 to nCount - 1

	strData = strData & RpadB(objFolderItems.Item(i).Name," ",30 )
'	strData = strData & RpadB(objFolderItems.Item(i).ModifyDate," ",30 )
	strData = strData & RpadB(objFolderItems.Item(i).Path," ",89 )
'	strData = strData & RpadB(objFolderItems.Item(i).Size," ",20 )
'	strData = strData & RpadB(objFolderItems.Item(i).Type," ",20 )
	WScript.Echo strData
	strData = ""

Next


' 列挙2
Wscript.Echo
Wscript.Echo "【デスクトップ/詳細情報】"
Wscript.Echo "----------------------------------------------------"
strData = ""
For Each obj In objFolderItems

	strData = strData & RpadB(objFolder.GetDetailsOf(obj, 0)," ",20 )
	strData = strData & RpadB(objFolder.GetDetailsOf(obj, 1)," ",20 )
	strData = strData & RpadB(objFolder.GetDetailsOf(obj, 2)," ",20 )
	strData = strData & RpadB(objFolder.GetDetailsOf(obj, 3)," ",20 )
	strData = strData & RpadB(objFolder.GetDetailsOf(obj, 4)," ",20 )
	strData = strData & RpadB(objFolder.GetDetailsOf(obj, -1)," ",20 )
	WScript.Echo strData
	strData = ""

Next

Wscript.Echo

</SCRIPT>
</JOB>



▼ Windows10 での実行結果サンプル


結果をテキストファイルに残すには、以下のようにして表示をファイルにリダイレクトします
cscript ginpro_1517239356526.wsf > log.txt
一部特殊フォルダが表示されていますが、それらを使用してエクスプローラを起動する事ができます。Winows10 で、PC を選択してエクスプローラを開く記述は以下のようになります。
Explorer /e,/root,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}



posted by at 2018-12-08 13:30 | VBScript | このブログの読者になる | 更新情報をチェックする

2018年12月01日

DAZ3D で Amazon Pay を使用してみました。



いままでずっとPayPal 使ってましたし別にそれでいいんですが、どうしても PayPal と比較したくなったので使ってみました。PayPal と同じくログイン画面が出ますので、日本の Amazon のユーザとパスワードで送信すると普通に支払いが完了しました。金額も同程度の以前の PayPal と比べて同じです。

ただ、しかし、記録が残ってません...



Amazon Payについて
Amazon.co.jpのアカウントをお持ちの場合、Amazon Payのアカウントは自動的に作成されています。Amazon Payに対応している他のサイトで初めてAmazon Payを使用したとき、アカウントが有効になります。Amazon Payのアカウントは、Amazon.co.jpのアカウントと連動しており、Amazon.co.jpに登録しているクレジットカードをすぐに利用することができます。
で、最後に 詳しくは、https://pay.amazon.com/jp をご覧ください。 と言われてログインしてみると『お支払はございません。』だそうです。 まぁ、いいけどね。PayPal でも Amazon でも、必要額しか入れてない VISA デビットだし。 メールは amazon.com から来るので、そこにあるリンク先からログインしようとしても当然できません( これは想定内 ) ▼ なぜかあまり解説が見つからない( Wikipedia にあったリンク ) アマゾンが語る「Amazonログイン&ペイメント」導入1000社突破の今 PayPal と同じくクレジットカードの番号等漏洩の心配を一応はしなくていいのがメリットですが、まだ PayPal に軍配上がりそうな気はしますね、これでは。 ちなみに、DAZ3D の フォーラムの Adminstrator が、Introducing Amazon Pay でこう言ってます。
当社のAmazon Payは現在、定期的な取引を処理することができません。 
▼ 一般詳細 Amazon Payとは?使い方とメリットデメリット・提携サイト・ギフト券との併用について徹底解説
posted by at 2018-12-01 19:57 | DAZ3D | このブログの読者になる | 更新情報をチェックする

DAZ3D : G8 に Genesis の衣装が着れるか改めて試してみた

RSSY Clothing Converter from Genesis to Genesis 8 Female という製品があったので内容を見てみると、バッチ処理でプロダクトそのものをコンバートしてセットを作成するものでした。よくよく読むと一部の製品では必ずしもうまく行くとは限らないとあったり、自分の持ってる Genesis の衣装の種類と実際 G8 に着せてみてからでも遅くないと思ってやってみたんですが...



普通に着れました。

プロダクトのサンプル画像と同じ衣装です。靴は G2 用のスニーカーですが、オリジナルのブーツでも着れてます。ひょっとして、Wear Them All - Autofitting Clones and Clothing Smoothers for Genesis 3 Female(s) が入ってるからかな..なんて思ったりもしますが、DAZStudio の裏事情なんてありそうだけど解るわけでも無いので着れてるからいい事にしよう。

環境設定

単純平面作って、Iray で光沢( シルク系 )
HDRI は完全な夜
エミッション球を少し紫で高さと大きさを調整してメインの照明
顔の近くに少しオレンジのポイントライト

衣装

Dark Moods for Genesis
Running Shoes for Genesis 2 Female(s) and Genesis



Marja Hair



posted by at 2018-12-01 17:58 | Iray DAZ3D DAZStudio イラスト | このブログの読者になる | 更新情報をチェックする

2018年10月28日

PowerShell 移行用 C# コンソールアプリのコードテスト( ZIP 圧縮 )

▼ とてもお世話になっています
ZipFile、ZipArchiveクラスを使用して、ZIP圧縮、展開(解凍)、リスト表示などを行う( dobon.net )

この方法ですと、画像関連で Thumbs.db が書庫に入ってしまいますが、仕方ないです。

public class MyClass のほうを、PowerShell に書いて [MyClass]::create_zip() で実行します。
using System;
using System.IO;
using System.IO.Compression;

namespace create_zip {
	class Program {

		static void Main(string[] args) {

			MyClass.create_zip(args[0], args[1]);

		}
	}

	public class MyClass {
		public static void create_zip(string dir, string zipPath) {

			Console.WriteLine(dir);

			if (File.Exists(zipPath)) {
				File.Delete(zipPath);
			}

			try {
				ZipFile.CreateFromDirectory(
							dir,
							zipPath
						);
			}
			catch (Exception ex) {

				Console.WriteLine(ex.Message);
			}

		}

	}
}


▼ 久しぶりに使うとタブの設定や中かっこの設定を忘れていた。
 

# バッチファイルからの引数
$dir = $Args[0]
$zipPath = $Args[1]

$code = @"
using System;
using System.IO;
using System.IO.Compression;

public class MyClass {
	public static void create_zip(string dir,string zipPath) {

		Console.WriteLine(dir);

		if (File.Exists(zipPath)) {
			File.Delete(zipPath);
		}

		try {
			ZipFile.CreateFromDirectory(
						dir,
						zipPath
					);
		}
		catch (Exception ex) {

			Console.WriteLine(ex.Message);
		}

	}

}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies `
	( `
	"System.IO.Compression.FileSystem" `
	)

# 実行
[MyClass]::create_zip($dir,$zipPath)





posted by at 2018-10-28 19:08 | C# | このブログの読者になる | 更新情報をチェックする