- Hongliang
- ぬし
- 会議室デビュー日: 2004/12/25
- 投稿数: 576
|
投稿日時: 2006-05-17 16:49
引用: |
|
かるあさんの書き込み (2006-05-17 16:39) より:
String や StringBuilder で受けると NULL の部分で切れますね
|
StringBuilder は確かに NULL で切りますが、String は切りません。NULL 区切りの文字列配列を受けるのに便利です。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-17 16:54
引用: |
|
Hongliangさんの書き込み (2006-05-17 16:39) より:
MessageBox にしろ TextBox にしろ、NULL 文字以降は表示してくれないので「見た目には」失敗しているようにしか見えないかと。
NullChar で stBuffer を Split してやらないと。
|
そうでした。(;^-^)
すぐさま MessageBox.Show というのは不適切でした。
引用: |
|
Split する前に TrimEnd で後ろのよけいな NullChar を削除すると便利かな。
|
拝承。直しておきます。
コード: |
|
<System.Runtime.InteropServices.DllImport("KERNEL32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function GetPrivateProfileSection( _
ByVal appName As String, _
ByVal returnedString As String, _
ByVal bufferSize As Integer, _
ByVal fileName As String) As Integer
End Function
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim stBuffer As String = New String(Microsoft.VisualBasic.ControlChars.NullChar, 1024)
GetPrivateProfileSection("MosaMosaAA", stBuffer, 1024, "C:\MakiMakiLove.ini")
Dim stResult As String = stBuffer.TrimEnd(Microsoft.VisualBasic.ControlChars.NullChar)
Dim stSplits As String() = stResult.Split(Microsoft.VisualBasic.ControlChars.NullChar)
For Each st As String In stSplits
MessageBox.Show(st)
Next
End Sub
|
投稿前に試すのを怠ってはいけませんね... (;_ _)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- かるあ
- ぬし
- 会議室デビュー日: 2003/11/16
- 投稿数: 1190
- お住まい・勤務地: センガワ→ムサシノ
|
投稿日時: 2006-05-17 16:55
引用: |
|
Hongliangさんの書き込み (2006-05-17 16:49) より:
StringBuilder は確かに NULL で切りますが、String は切りません。NULL 区切りの文字列配列を受けるのに便利です。
|
あっそうだったんですね
無駄に byte配列 で受けて ループ処理してしまった・・・
|
- わしこ
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 35
|
投稿日時: 2006-05-17 18:08
[quote]
じゃんぬねっとさんの書き込み (2006-05-17 16:54) より:
引用: |
|
Hongliangさんの書き込み (2006-05-17 16:39) より:
コード: |
|
<System.Runtime.InteropServices.DllImport("KERNEL32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function GetPrivateProfileSection( _
ByVal appName As String, _
ByVal returnedString As String, _
ByVal bufferSize As Integer, _
ByVal fileName As String) As Integer
End Function
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim stBuffer As String = New String(Microsoft.VisualBasic.ControlChars.NullChar, 1024)
GetPrivateProfileSection("MosaMosaAA", stBuffer, 1024, "C:MakiMakiLove.ini")
Dim stResult As String = stBuffer.TrimEnd(Microsoft.VisualBasic.ControlChars.NullChar)
Dim stSplits As String() = stResult.Split(Microsoft.VisualBasic.ControlChars.NullChar)
For Each st As String In stSplits
MessageBox.Show(st)
Next
End Sub
|
投稿前に試すのを怠ってはいけませんね... (;_ _)
|
Hongliang様、じゃんぬねっと様、かるあ様、返答ありがとうございます。
じゃんぬねっと様、わざわざ試していただいてありがとうございます。
掲載されていたコードで試したところ、
INIファイルの内容を配列で取得することができました。
しかし、取得した値が
stSplits[1] A1B=7v3Gl1GRo4Q4ZyTl0vBSWxXNFFIHGMqpI=
stSplits[2] C2D=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHGMqpI
stSplits[3] E3F=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHG!!!!!
stSplits[4] G4H=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHG$$$$=
でした。
理想は「A1B」「C2D」「E3F」「G4H」を取得したいのですが、
このあたりの変数を詳しくみてみましたが、
キー名だけを保持または取得できる関数はないようでした。
たびたび質問して申し訳ありませんが、
キー名のみを取得するにはどうしたらいいのでしょうか?
|
- うにくま
- ベテラン
- 会議室デビュー日: 2005/11/05
- 投稿数: 82
|
投稿日時: 2006-05-17 18:12
これでキー部分のみ取得できると思います。
コード: |
|
Private Declare Function GetPrivateProfileBytes Lib "KERNEL32.DLL" Alias "GetPrivateProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As Byte(), _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
Private Function GetPrivateProfileKeys(ByVal section As String, ByVal fileName As String) As String()
Dim returnByte(1024) As Byte
Dim returnLength As Integer = GetPrivateProfileBytes(section, Nothing, Nothing, returnByte, returnByte.Length, fileName)
Dim returnString As String = Encoding.Default.GetString(returnByte, 0, returnLength - 1)
Return returnString.Split(Microsoft.VisualBasic.ControlChars.NullChar)
End Function
|
[ メッセージ編集済み 編集者: うにくま 編集日時 2006-05-17 18:15 ]
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-17 19:15
引用: |
|
わしこさんの書き込み (2006-05-17 18:08) より:
たびたび質問して申し訳ありませんが、
キー名のみを取得するにはどうしたらいいのでしょうか?
|
先ほど紹介した、IniFile クラスをクラス ライブラリとして加えて利用したらどうですか? (;^-^)
どうも先ほどのレスを見ると、
引用: |
|
XMLを使用する方が推奨されているのですね。
なるべく単純な方法で最善の手段をとりたいと思っていますので、
参考にさせていただきいます。
|
XML ファイル云々についてのみ書かれており、
本題である IniFile クラスについてはスルーされているようでしたので...
IniFile クラス
参照設定で、この DLL を追加するだけ使えます。
お望みどおり、好きな Section 丸ごと読み込み Key 名だけ取得することもできます。
先ほども述べたように、ReadSection メソッドを使います。
戻り値は、Key と Value が分割されたコレクションとして取得できます。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- わしこ
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 35
|
投稿日時: 2006-05-18 11:36
*****************************
*********解決しました*********
*****************************
うにくま様、じゃんぬねっと様、返答ありがとうございます。
うにくま様の掲示してくださった方法で、無事解決することができました。
じゃんぬ様のDLL追加はただいま試み中です。
なんせ.NET始めて1週間なものですから、参照設定はできたものの
利用の仕方で四苦八苦しています。
オブジェクトブラウザでみたところReadSection メソッドを発見しましたので、
もう一息といったところでしょうか。。
なにはともあれ、みなさまのお陰で無事解決できました。
本当にありがとうございました。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-05-18 22:35
引用: |
|
わしこさんの書き込み (2006-05-18 11:36) より:
なんせ.NET始めて1週間なものですから、参照設定はできたものの利用の仕方で四苦八苦しています。
オブジェクトブラウザでみたところReadSection メソッドを発見しましたので、
もう一息といったところでしょうか。。
|
ですね。(^^)
ReadSection メソッドの戻り値のコレクションを理解すればバッチリです。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|