tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルIniファイルのコメント
記事No16472
投稿日: 2018/10/24(Wed) 00:04
投稿者まだまだVB6
いつも利用させていただいています。
早速ですが、質問です。
当方、現在VB6にてプログラムの開発を行っているんですが
プログラムの設定にIniファイルを使用しています。
構成としては、
[Section]
Key=データ  ;コメント
というIniファイルを作っているのですが
このファイルにGetPrivateProfileStringをすると
;が無視されずコメントまで取得してしまいます。
データのみ取る方法はないのでしょうか?
どなたかご教授頂けると助かります。

[ツリー表示へ]
タイトルRe: Iniファイルのコメント
記事No16473
投稿日: 2018/10/24(Wed) 09:33
投稿者魔界の仮面弁士
> プログラムの設定にIniファイルを使用しています。
作成もプログラムから行うのでしょうか。
それとも読み込みだけですか?

読み込みについては、どのように行っていますか?

・Line Input # ステートメント
・Input / InputB / Input$ / InputB$ 関数
・Scripting.TextStream オブジェクト
・ADODB.Stream オブジェクト
・GetPrivateProfileString API
・GetPrivateProfileInt API
・GetPrivateProfileSectionNames API
・GetPrivateProfileSection API
・GetPrivateProfileStruct API
・その他

また、Unicode 形式の Ini ファイルなのか ANSI 版なのかも気になるところ。


INI ファイルの形式は何パターンかありますし、その解釈はアプリケーションによって異なります。
https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
たとえば上記でも、下記のような記述が見受けられます。
>> INIファイルのフォーマットは規格化・標準化はされておらず、明確には決まっていない。


> Key=データ  ;コメント
> というIniファイルを作っているのですが
INI ファイルの処理系によって、
・そもそもコメントをサポートしていない
・行頭「;」で始まる行をコメント行として認める
・行頭「#」で始まる行をコメント行として認める
・文中「;」以降の部分をコメントとして認める
・文中「#」以降の部分をコメントとして認める
・文中コメントを認めるが、" で囲まれていると無視される
などなど、いろいろなパターンがあるわけで…。


> ;が無視されずコメントまで取得してしまいます。
だったら、Split 関数を ; 以降を自分で切り落とせば、
「Key」に対して「データ  」という文字列が得られるかと。


> このファイルにGetPrivateProfileStringをすると
> ;が無視されずコメントまで取得してしまいます。
行頭ではなく、文中のセミコロンですよね。
GetPrivateProfileString はそういう実装ということでしょう。

https://msdn.microsoft.com/ja-jp/library/cc429770.aspx
>> Windows NT/2000:セミコロン(;)で始まるコメント行は削除され、lpReturnedString パラメータが指すバッファへ格納されません。
>> Windows 95/98:コメントを含めたセクション全体が、lpReturnedString パラメータが指すバッファへ格納されます。

[ツリー表示へ]
タイトルRe^2: Iniファイルのコメント
記事No16474
投稿日: 2018/10/24(Wed) 10:24
投稿者まだまだVB6
魔界の仮面弁士さま、返信ありがとうございます。

> 作成もプログラムから行うのでしょうか。
> それとも読み込みだけですか?
ファイルから設定値を読み込むだけです。


> 読み込みについては、どのように行っていますか?
読み込みには、API関数の『GetPrivateProfileString』を
使用しています。

> また、Unicode 形式の Ini ファイルなのか ANSI 版なのかも気になるところ。
ANSI版で作成しています。

>> INIファイルのフォーマットは規格化・標準化はされておらず、明確には決まっていない。
そうなんですね。Iniファイル自体標準化されていないのですね。

> > このファイルにGetPrivateProfileStringをすると
> > ;が無視されずコメントまで取得してしまいます。
> 行頭ではなく、文中のセミコロンですよね。
> GetPrivateProfileString はそういう実装ということでしょう。
そうですね。他を調べてみても載っていないし、行を変えてコメントを
打つとそれはコメントとして認識されているので仕様ということ
なのかもしれません。

今回、私の知識不足から行中に『;』を打つとそれ以降コメントとして
認識してくれるものだと思っていたので単純に『GetPrivateProfileString』を
実行すれば、データのみを取ってきてくれるものだと思い込んでいました。
どうやら、そうではないようなので取得できている『データ』部分から
Split 関数やInstr関数を使って自分で切り出してデータのみを取得するように
したいと思います。
今回も大変勉強になりました。ありがとうございました。

[ツリー表示へ]