SQLの窓

2011年09月10日


VB.net での テキストファイルの読み書きを、出力時のみキャラクタセット毎に条件コンパイル指定する



以下のように指定した文字列を使用して条件コンパイルを行います

vbc.exe vbc_textfile.vb /define:SJIS_BUILD

主なエンコード として以下の5つのエンコードを使用します
1) SHIFT_JIS
2) EUC-JP
3) UNICODE
4) UTF-8N
5) UTF-8 ( BOM付き )
( パッケージ内に簡易ダンプを同梱してますので、インストールして BOM を確認できます ) 比較的小さなファイルの場合は、ReadFile.ReadToEnd() で一度に全てメモリに 取得するのが簡単ですが、大きなファイルは行単位で処理するのが通常です。
Imports System.IO
Imports System.Text

Module Module1

	Sub Main()

		' 入力ファイルのパス ( "入力ファイルのパス" と指定する )
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は一つのみ許可
		if arguments.Length <> 2 then
			Console.WriteLine("引数を指定して下さい")
			Return
		end if

		' 引数から取得
		Dim BaseFilePath As String = arguments(1)

		' **************************************************
		' 主なエンコード
		' **************************************************
		' SHIFT_JIS
		Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
		' EUC-JP
		Dim UJIS_Enc As Encoding = Encoding.GetEncoding(51932)
		' UNICODE 用
		Dim UNI_Enc As Encoding = Encoding.GetEncoding(1200)
		' UTF-8N
		Dim UTF8N_Enc As New UTF8Encoding()
		' UTF-8
		Dim UTF8_Enc As New UTF8Encoding(True)

		' **************************************************
		' SHIFT_JISで読み、SHIFT_JIS で出力する
		' **************************************************
		' 読み込み用
		Dim ReadFile As StreamReader = New StreamReader( BaseFilePath, SJIS_Enc )
		' 書き込み用( 第二引数が False なので、上書き )

#If SJIS_BUILD Then
		Dim WriteFile As StreamWriter = New StreamWriter( BaseFilePath + ".txt", False, SJIS_Enc )
#End If
#If UJIS_BUILD Then
		Dim WriteFile As StreamWriter = New StreamWriter( BaseFilePath + ".txt", False, UJIS_Enc )
#End If
#If UNI_BUILD Then
		Dim WriteFile As StreamWriter = New StreamWriter( BaseFilePath + ".txt", False, UNI_Enc )
#End If
#If UTF8N_BUILD Then
		Dim WriteFile As StreamWriter = New StreamWriter( BaseFilePath + ".txt", False, UTF8N_Enc )
#End If
#If UTF8_BUILD Then
		Dim WriteFile As StreamWriter = New StreamWriter( BaseFilePath + ".txt", False, UTF8_Enc )
#End If

		' SHIFT_JIS で読み込み
		Dim LineText As String = Nothing
		' Peek() は、StreamReader オブジェクトの現在位置は変わりません
		' それ以上読み取り可能な文字がない場合、戻り値は -1 です。
		' 以下は、MSDN ライブラリでのサンプルコードと同じものです
		Do While ReadFile.Peek() >= 0
			LineText = ReadFile.ReadLine()

			WriteFile.WriteLine( LineText )
		Loop

		' **************************************************
		' 終了処理
		' **************************************************
		WriteFile.Close()
		WriteFile.Dispose()
		ReadFile.Close()
		ReadFile.Dispose()

		Console.WriteLine("処理が終了しました")

		' 一時停止
		Console.Write("Enterキーを押して下さい : ")
		Console.ReadLine()

	End Sub

End Module



タグ:VB.NET
posted by lightbox at 2011-09-10 15:01 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり