Ruby 開発環境準備 (Windows7) 2未登録の番号の検索

二〇一五年卯月十一日

iniファイルを読み込みたかったけど…

 BVEの車両パラメータファイルはiniファイルっぽい書式になっているので、楽して読み込めないかなぁと思ってググったら、MS公式に載っていました。




★iniファイルの読み込み・書き込み
・iniファイルに文字列を書き込み
<DllImport("KERNEL32.DLL")> _
Public Shared Function WritePrivateProfileString( _
    ByVal lpAppName As String, _
    ByVal lpKeyName As String, _
    ByVal lpString As String, _
    ByVal lpFileName As String) As Integer
End Function

・iniファイルから文字列を読み込み
<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
Public Shared Function GetPrivateProfileString( _
    ByVal lpAppName As String, _
    ByVal lpKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString As System.Text.StringBuilder, _
    ByVal nSize As Integer, _
    ByVal lpFileName As String) As Integer
End Function

・iniファイルから整数値を読み込み
<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
Public Shared Function GetPrivateProfileInt( _
    ByVal lpAppName As String, _
    ByVal lpKeyName As String, _
    ByVal nDefault As Integer, _
    ByVal lpFileName As String) As Integer
End Function

 
ボタンのクリックイベントで
Dim strSb As System.Text.StringBuilder
strSb = New System.Text.StringBuilder
Form1.GetPrivateProfileString("OneLeverCab", "ReverserText", "defaule", _
  strSb, strSb.Capacity, "C:\BveTs\Scenarios\Train\test\parameters.txt") 
MsgBox(strSb.ToString)

とやったはいいのですが、文字化けを起こしました。

 Windows内部の文字コードはUnicode(UTF16)なのに対しパラメータファイルはUTF8なので、これで化けてるんだろうと思い、文字コード変換関数が無いようなのでいろんなサイトをググりながら自作
・UTF8→Unicode
Private Function enc8_16(before As String) As String
    Dim utf08Enc = System.Text.Encoding.UTF8
    Dim utf16Enc = System.Text.Encoding.Unicode
    Dim beforeBytes() As Byte = utf08Enc.GetBytes(before)
    Dim afterBytes() As Byte = System.Text.Encoding.Convert(utf16Enc, utf08Enc, beforeBytes)
    Return utf16Enc.GetString(afterBytes)
End Function

・Unicode→UTF8
Private Function enc16_8(before As String) As String
    Dim utf08Enc = System.Text.Encoding.UTF8
    Dim utf16Enc = System.Text.Encoding.Unicode
    Dim beforeBytes() As Byte = utf16Enc.GetBytes(before)
    Dim afterBytes() As Byte = System.Text.Encoding.Convert(utf08Enc, utf16Enc, beforeBytes)
    Return utf08Enc.GetString(afterBytes)
End Function

ボタンイベント内のメッセージボックスの部分を
Dim txt As String = strSb.ToString
MsgBox(txt & Chr(13) & enc8_16(txt))

に変更したところ、enc8_16も盛大に文字化けしました。しかも文字数が増えてるし…

 仕方ないのでテキストファイルとして読み込む方式にしたいと思います。今日中にファイル入出力の機能をつけようと思っていましたがムリポ…

 なにか良い手立てがあれば教えて下さい。
 

このエントリーをはてなブックマークに追加 Clip to Evernote
iliketrain at 23:24│Comments(0)TrackBack(0)BVE開発 | Visual Basic

トラックバックURL

コメントする

名前
 
  絵文字
 
 
Ruby 開発環境準備 (Windows7) 2未登録の番号の検索