tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルキー値を複数取得
記事No11988
投稿日: 2008/04/11(Fri) 09:29
投稿者ケース
VB6.0 xpで開発してる者です、iniFileからキー値を取得しているのですが、キー値をセクション内全てなど複数取得できる方法とかご存知でしょうか?
よろしければ知恵をお借りしたいです。

[ツリー表示へ]
タイトルRe: キー値を複数取得
記事No11990
投稿日: 2008/04/11(Fri) 10:11
投稿者魔界の仮面弁士
> VB6.0 xpで開発してる者です、iniFileからキー値を取得しているのですが、キー値をセクション内全てなど複数取得できる方法とかご存知でしょうか?

GetPrivateProfileString API を使ってください。
引数に ByVal vbNullString を渡せば、それらを vbNullChar 区切りの
データとして列挙することができます。

http://msdn.microsoft.com/library/ja/jpsysinf/html/_win32_getprivateprofilestring.asp

[ツリー表示へ]
タイトルRe^2: キー値を複数取得
記事No11993
投稿日: 2008/04/11(Fri) 10:59
投稿者ケース
魔界の仮面弁士さん、
レスありがとうございます。

'INIファイルから取得
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
        "GetPrivateProfileStringA" ( _
            ByVal lpApplicationName As String, _
            ByVal lpKeyName As Any, _
            ByVal lpDefault As String, _
            ByVal lpReturnedString As String, _
            ByVal nSize As Long, _
            ByVal lpFileName As String) As Long

上記記述のlpKeyNameをvbNull As Stringに変更と、

'拡張子取得
    cmbExt.Text = GetINIValue("Ext1", "FileExt", App.Path & "\FileSearch.ini")
上記の"Ext1"(キー値)の記述も変わってくるのでしょうか?

理解が悪くて申し訳ないです。

[ツリー表示へ]
タイトルRe^3: キー値を複数取得
記事No11996
投稿日: 2008/04/11(Fri) 11:06
投稿者魔界の仮面弁士
> 上記記述のlpKeyNameをvbNull As Stringに変更と、
vbNull ……ですか? それは、今回は使わないですよ。

vbNull は、VarType 関数の戻り値判定に使われる定数で、
値としては、Long 型の 1 と同じです。

私が書いた内容を、もう一度確認してみてください。
>> 引数に ByVal vbNullString を渡せば、それらを vbNullChar 区切りの


> cmbExt.Text = GetINIValue("Ext1", "FileExt", App.Path & "\FileSearch.ini")
> 上記の"Ext1"(キー値)の記述も変わってくるのでしょうか?
GetINIValue の実装が不明瞭なので、答えようがないです。

[ツリー表示へ]
タイトルRe^4: キー値を複数取得
記事No11998
投稿日: 2008/04/11(Fri) 11:56
投稿者ケース
Sub NewData()       'ini.Fileから取得
  
   Dim KeyName As String       'キー
   KeyName = vbNullString      'Nullセット
    
 '拡張子取得
 cmbExt.Text = GetINIValue("Ext1", "FileExt", App.Path & "\FileSearch.ini")

End Sub

上記のような感じで作成しましたが、列挙はできたのですが。
iniFileの中の

[FileExt] 'セクション名
Ext1=キー1
Ext2=キー2

というiniFileのキー以前を取得してきて,Ext1Ext2...のように列挙されます。
根本的に間違いでしょうか?

> GetINIValue の実装が不明瞭なので、答えようがないです。
Get INIValue は以下の内容です。補足が足りずすみません。
Public Function GetINIValue(KEY As String, Section As String, ININame As String) As String
    
    '文字列の領域確保
    Dim Value As String * 255
    
    'エラー表示
    Call GetPrivateProfileString(Section, KEY, "Error", Value, Len(Value), ININame)
    
    'Null値の除去
    GetINIValue = Replace(Value, vbNullChar, "")

End Function

度々ですがお願いします。

[ツリー表示へ]
タイトルRe^5: キー値を複数取得
記事No12001
投稿日: 2008/04/11(Fri) 12:55
投稿者魔界の仮面弁士
>    Dim KeyName As String       'キー
>    KeyName = vbNullString      'Nullセット
>   cmbExt.Text = GetINIValue("Ext1", "FileExt", App.Path & "\FileSearch.ini")

変数 KeyName が、一切使用されていないようですが…。

> [FileExt] 'セクション名
> Ext1=キー1
> Ext2=キー2
> というiniFileのキー以前を取得してきて,Ext1Ext2...のように列挙されます。
> 根本的に間違いでしょうか?
キー名が列挙できたなら、得られたそれぞれのキーを繰り返し呼び出せば、
対応する値が得られますよね。

>     Dim Value As String * 255
255 を超えるデータは来ないのでしょうか?

>     'Null値の除去
>     GetINIValue = Replace(Value, vbNullChar, "")
列挙時の切り出しを行うためには、vbNullChar を潰すのではなく、
vbNullChar で分断(Split等)する必要があるかと。

[ツリー表示へ]