SQLの窓

2010年05月30日


VB.net : 文字単位の ASCII と Unicode

0 〜 127 までは同じですが、Chr で作成される文字は SHIFT_JIS なので、全てが存在しません。それに対して、ChrW では、全ての文字コードが存在しています。 

また、SHIFT_JIS の半角カタカナは、SHIFT_JIS の文字コードにありますが、Unicode として表現される場合は、SHIFT_JIS のコードとは違います。

半角カナの ア は、SHIFT_JIS では 0xB1 ですが、Unicode では、0xFF71 です
Module MyModule

' *****************************************
' Chr と ChrW と Asc と AscW
' *****************************************
Sub Main()

	Dim I As Integer
	Dim J As Integer
	Dim c As Char
	Dim c_code As Integer

	' SHIFT_JIS
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.Chr(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.Asc(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

	Console.WriteLine()

	' SHIFT_JIS の中の文字の一部を Unicodeに変換
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.Chr(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.AscW(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

	Console.WriteLine()

	' Unicode
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.ChrW(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.AscW(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

End Sub

End Module


00 10 20 30 40 50 60 70 80 -- A0 B0 C0 D0 -- --
01 11 21 31 41 51 61 71 -- -- A1 B1 C1 D1 -- --
02 12 22 32 42 52 62 72 -- -- A2 B2 C2 D2 -- --
03 13 23 33 43 53 63 73 -- -- A3 B3 C3 D3 -- --
04 14 24 34 44 54 64 74 -- -- A4 B4 C4 D4 -- --
05 15 25 35 45 55 65 75 -- -- A5 B5 C5 D5 -- --
06 16 26 36 46 56 66 76 -- -- A6 B6 C6 D6 -- --
07 17 27 37 47 57 67 77 -- -- A7 B7 C7 D7 -- --
08 18 28 38 48 58 68 78 -- -- A8 B8 C8 D8 -- --
09 19 29 39 49 59 69 79 -- -- A9 B9 C9 D9 -- --
0A 1A 2A 3A 4A 5A 6A 7A -- -- AA BA CA DA -- --
0B 1B 2B 3B 4B 5B 6B 7B -- -- AB BB CB DB -- --
0C 1C 2C 3C 4C 5C 6C 7C -- -- AC BC CC DC -- --
0D 1D 2D 3D 4D 5D 6D 7D -- -- AD BD CD DD -- FD
0E 1E 2E 3E 4E 5E 6E 7E -- -- AE BE CE DE -- FE
0F 1F 2F 3F 4F 5F 6F 7F -- -- AF BF CF DF -- FF

00 10 20 30 40 50 60 70 80 -- F8F0 FF70 FF80 FF90 -- --
01 11 21 31 41 51 61 71 -- -- FF61 FF71 FF81 FF91 -- --
02 12 22 32 42 52 62 72 -- -- FF62 FF72 FF82 FF92 -- --
03 13 23 33 43 53 63 73 -- -- FF63 FF73 FF83 FF93 -- --
04 14 24 34 44 54 64 74 -- -- FF64 FF74 FF84 FF94 -- --
05 15 25 35 45 55 65 75 -- -- FF65 FF75 FF85 FF95 -- --
06 16 26 36 46 56 66 76 -- -- FF66 FF76 FF86 FF96 -- --
07 17 27 37 47 57 67 77 -- -- FF67 FF77 FF87 FF97 -- --
08 18 28 38 48 58 68 78 -- -- FF68 FF78 FF88 FF98 -- --
09 19 29 39 49 59 69 79 -- -- FF69 FF79 FF89 FF99 -- --
0A 1A 2A 3A 4A 5A 6A 7A -- -- FF6A FF7A FF8A FF9A -- --
0B 1B 2B 3B 4B 5B 6B 7B -- -- FF6B FF7B FF8B FF9B -- --
0C 1C 2C 3C 4C 5C 6C 7C -- -- FF6C FF7C FF8C FF9C -- --
0D 1D 2D 3D 4D 5D 6D 7D -- -- FF6D FF7D FF8D FF9D -- F8F1
0E 1E 2E 3E 4E 5E 6E 7E -- -- FF6E FF7E FF8E FF9E -- F8F2
0F 1F 2F 3F 4F 5F 6F 7F -- -- FF6F FF7F FF8F FF9F -- F8F3

00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
01 11 21 31 41 51 61 71 81 91 A1 B1 C1 D1 E1 F1
02 12 22 32 42 52 62 72 82 92 A2 B2 C2 D2 E2 F2
03 13 23 33 43 53 63 73 83 93 A3 B3 C3 D3 E3 F3
04 14 24 34 44 54 64 74 84 94 A4 B4 C4 D4 E4 F4
05 15 25 35 45 55 65 75 85 95 A5 B5 C5 D5 E5 F5
06 16 26 36 46 56 66 76 86 96 A6 B6 C6 D6 E6 F6
07 17 27 37 47 57 67 77 87 97 A7 B7 C7 D7 E7 F7
08 18 28 38 48 58 68 78 88 98 A8 B8 C8 D8 E8 F8
09 19 29 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AB BB CB DB EB FB
0C 1C 2C 3C 4C 5C 6C 7C 8C 9C AC BC CC DC EC FC
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE BE CE DE EE FE
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF


posted by lightbox at 2010-05-30 17:06 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

2009年12月07日


コマンドプロンプト : 入力したキーストロークを表示しない readkey.exe

ブラウザでダウンロード
標準入力でデータを入力できるアプリケーションに対して、
パスワード等の入力時に表示させたくない処理を想定して作成しました。

php による FTP ダウンロードのサンプルを付加しています

Framework では、日本語入力がうまくいかなかったので、VC8 でビルド
した readkey_vc.exe ( 含ソースコード ) も添付しています
Imports System.Text
Imports System.Threading

Module MyModule

' ********************************************************
' * エコー無しのキー入力
' * Backspace キーでバッファクリア
' * Enter で入力内容を標準出力
' ********************************************************
Sub Main()

	Dim cki As ConsoleKeyInfo = New ConsoleKeyInfo()
	Dim ret As String = ""

	Do
		' 押されたキーが入力ストリームに入るるまで待つ
		Do While Console.KeyAvailable = False
			Thread.Sleep(250)
		Loop

		' キーを取得( エコーしない )
		cki = Console.ReadKey(True)
		if cki.Key = ConsoleKey.Enter
			Exit Do
		end if
		if cki.Key = ConsoleKey.Backspace
			ret = ""
		else
			ret = ret & Char.ToString(cki.KeyChar)
		end if
	Loop

	Console.WriteLine( ret )

End Sub

End Module

#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <ctype.h>

int _tmain(int argc, _TCHAR* argv[])
{
	int ch;

	char buff[1024];
	int p;

	buff[0] = 0x00;
	p = 0;
	while(1) {
		ch = _getch();
		if ( char(ch) == 0x0d ) {
			break;
		}
		if ( char(ch) == 0x08 ) {
			buff[0] = 0x00;
			p = 0;
			continue;;
		}
		buff[p] = ch;
		p++;
		buff[p] = 0x00;
	}

	printf("%s\n", buff);

	return 0;
}

@echo off
echo 以下にパスワードを入力して下さい & readkey | php.exe ftp_download.php

************************************************************
* エコー無し入力
* 入力した結果は表示されず、Enter キーを入力すると
* 標準出力へ出力します
* Back Space で入力内容をリセットできます
************************************************************

【VB.net : 日本語入力不可】
readkey.exe 

【VC8 : 日本語入力可】
readkey_vc.exe 

************************************************************
* 利用方法
************************************************************
入力時に表示したくないパスワード入力に使用します。
結果をリダイレクトする事によって次のアプリケーション
にパスワードを引き渡します

************************************************************
* 自分でビルドしたい場合( readkey.vb )
************************************************************
Framework3.5 でビルドする場合は、build_35.bat を実行します。
以下のファイルがあれば動作するばずです

C:\WINDOWS\Microsoft.NET\Framework\v3.5\vbc.exe

Framework2.0 でビルドする場合は、build_2.bat を実行します。
以下のファイルがあれば動作するばずです

■ 同梱している httpdownload.exe は、2.0 でビルドしています

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe


************************************************************
* ソースコード
************************************************************
■ readkey.vb

■ readkey_vc.cpp


************************************************************
* PHP を使ったサンプル
************************************************************
■ ftp_download.php

■ run.bat


************************************************************
* その他
************************************************************
■ 著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。


VB.net 関連の記事


posted by lightbox at 2009-12-07 17:18 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

2009年12月03日


VB.net/C# : 連続する文字の作成と良く使う文字列フォーマット

文字列へ変換するフォーマット文字列は、数値書式指定文字列 です。
' Char 型の "0" を作成
Dim baseFormat As Char = Char.Parse("0")

' 連続する "0" を作成
Dim zeroFormat As String = New String(baseFormat, 10)

' Char 型の "あ" を作成
Dim moji As Char = Char.Parse("あ")

' 連続する "あ" を作成
Dim many_moji As String = New String(moji, 20)
Console.WriteLine(many_moji)


' 16777215 => "0016777215"
Console.WriteLine((&HFFFFFF).ToString(zeroFormat))
Console.WriteLine(String.Format("{0:" + zeroFormat + "}", &HFFFFFF))

' 16777215 => "FFFFFFFF"
Console.WriteLine((&HFFFFFF).ToString("X"))
Console.WriteLine(String.Format("{0:X}", &HFFFFFF))

' 16777215 => "ffffffff"
Console.WriteLine((&HFFFFFF).ToString("x"))

' 16777215 => "16,777,215"
Console.WriteLine((&HFFFFFF).ToString("#,###"))

' 結果が空文字になります
Console.WriteLine("/" + (0).ToString("#,###") + "/")

' 10 は、文字列長指定
' 0 の位が # だと、0 はスペース、0だと、0 は 0
Console.WriteLine(String.Format("{0,10:#,###} : {1,10:#,##0}", 0, 0))

ああああああああああああああああああああ
0016777215
0016777215
FFFFFF
FFFFFF
ffffff
16,777,215
//
           :          0
▼ C#
char baseFormat = char.Parse("0");

string zeroFormat = new string(baseFormat, 10);

char moji = char.Parse("B");

string many_moji = new string(moji, 20);


Console.WriteLine(many_moji);
Console.WriteLine(16777215.ToString(zeroFormat));

Console.WriteLine(string.Format(("{0:" 
                    + (zeroFormat + "}")), 16777215));
Console.WriteLine(16777215.ToString("X"));

Console.WriteLine(string.Format("{0:X}", 16777215));

Console.WriteLine(16777215.ToString("x"));

Console.WriteLine(16777215.ToString("#,###"));

Console.WriteLine(("/" 
                + (0.ToString("#,###") + "/")));

Console.WriteLine(string.Format("{0,10:#,###} : {1,10:#,##0}", 0, 0));

オンライン(リアルタイム) VB=>C# ツール

関連するMicrosoft リンク

String.Format メソッド (String, Object) (System)


関連する記事


posted by lightbox at 2009-12-03 15:33 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

VB.net : 各種ディレクトリパスの取得 : テンポラリ/システム/特殊ディレクトリの列挙

何故か、GetTempPath で 最後に \ が付加されたので、無条件にGetDirectoryName を使用していますが、実際は、\ の有無で判断してから、処理したほうが良いと思います
' テンポラリディレクトリ( GetTempPath だと最後に \ が付加されてしまう )
Console.WriteLine( System.IO.Path.GetDirectoryName( System.IO.Path.GetTempPath() ) )

' VB的 テンポラリディレクトリ
Console.WriteLine( My.Computer.FileSystem.SpecialDirectories.Temp )

' システムディレクトリ
Console.WriteLine( Environment.SystemDirectory )

' Windows ディレクトリ
Console.WriteLine( System.IO.Path.GetDirectoryName( Environment.SystemDirectory ) )


' GetFolderPath で取得できるディレクトリ一覧
Dim Folders As Integer() = _
	Environment.SpecialFolder.GetValues(GetType(Environment.SpecialFolder))
Dim i As Integer

For i = 0 To Folders.Length - 1

	Console.WriteLine( Environment.GetFolderPath( Folders(i)) )

Next

' GetFolderPath で取得できるディレクトリ一覧とそれに対応する定義名一覧
Dim FolderNames As String() = _
	Environment.SpecialFolder.GetNames(GetType(Environment.SpecialFolder))
Dim nType As Integer

For i = 0 To Folders.Length - 1

	Console.WriteLine( FolderNames(i) )

	nType = CType( _
		System.Enum.Parse(GetType(Environment.SpecialFolder),FolderNames(i)), _
		Integer _
	)

	Console.WriteLine( Environment.GetFolderPath( nType ) )

Next

Desktop
C:\Documents and Settings\lightbox\デスクトップ
Programs
C:\Documents and Settings\lightbox\スタート メニュー\プログラム
Personal
C:\Documents and Settings\lightbox\My Documents
MyDocuments
C:\Documents and Settings\lightbox\My Documents
Favorites
C:\Documents and Settings\lightbox\Favorites
Startup
C:\Documents and Settings\lightbox\スタート メニュー\プログラム\スタートアップ
Recent
C:\Documents and Settings\lightbox\Recent
SendTo
C:\Documents and Settings\lightbox\SendTo
StartMenu
C:\Documents and Settings\lightbox\スタート メニュー
MyMusic
C:\Documents and Settings\lightbox\My Documents\My Music
DesktopDirectory
C:\Documents and Settings\lightbox\デスクトップ
MyComputer

Templates
C:\Documents and Settings\lightbox\Templates
ApplicationData
C:\Documents and Settings\lightbox\Application Data
LocalApplicationData
C:\Documents and Settings\lightbox\Local Settings\Application Data
InternetCache
C:\Documents and Settings\lightbox\Local Settings\Temporary Internet Files
Cookies
C:\Documents and Settings\lightbox\Cookies
History
C:\Documents and Settings\lightbox\Local Settings\History
CommonApplicationData
C:\Documents and Settings\All Users\Application Data
System
C:\WINDOWS\system32
ProgramFiles
C:\Program Files
MyPictures
C:\Documents and Settings\lightbox\My Documents\My Pictures
CommonProgramFiles
C:\Program Files\Common Files


関連する記事


タグ:VB.NET
posted by lightbox at 2009-12-03 12:19 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

VB.net : アプリケーションを開始した実行可能ファイルのパス

アセンブリ名(拡張子なし)はファイル名を変更しても変わりませんが
この場合はファイル名そのものを指します

※ My.Application.Info.AssemblyName
Console.WriteLine( System.Windows.Forms.Application.ExecutablePath )



関連する記事


タグ:VB.NET
posted by lightbox at 2009-12-03 11:09 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

VB.net : アプリケーションディレクトリ

概要
exe が存在するディレクトリです。通常、設定ファイル等を開く時に必要になります。
上のほうは、VB として用意されているもので、下は同じものですが
Framework として取り出しています
' VB 的 アプリケーションディレクトリ
Console.WriteLine(My.Application.Info.DirectoryPath)

' Freamework 的 アプリケーションディレクトリ
Dim thisA As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim info As Microsoft.VisualBasic.ApplicationServices.AssemblyInfo = _
 New Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(thisA)
Console.WriteLine(info.DirectoryPath)

以下は C# で書いたものです
// Freamework 的 アプリケーションディレクトリ 
System.Reflection.Assembly thisA = System.Reflection.Assembly.GetExecutingAssembly(); 
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo info = 
	new Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(thisA); 
System.Console.WriteLine(info.DirectoryPath); 

// ビルド例
// csc /r:%windir%\Microsoft.NET\Framework\v2.0.50727\Microsoft.VisualBasic.dll info.cs



関連する記事


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

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

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

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

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


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

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

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

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

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



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり