FreeBASIC マニュアルのトップに戻る

FreeBASIC Windows Ini File

目次→フォーラム→FreeBASIC→補足Reading a Windows format ".ini" file←オリジナル・トピック

Windows Ini ファイルを扱う 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

 このページは、フォーラムのトピックで、rdc さんが紹介してくれている「Ini-Object (iniobject.zip)」の日本語訳です。

http://users.freebasic-portal.de/rdc/programs.html#mozTocId316452

 これは、Windows Iniファイルを読み書きするための FreeBasic オブジェクトです。

プログラム例:
例えば「initest日本語.bas」として保存します。
そして、同じフォルダに「test.ini」と「inifile.bi」と「stringlist.bi」を保存します。
この「initest日本語.bas」をコンパイルして実行します。
' iniobject のテスト・プログラム
' 著作 Richard D. Clark
' 共有著作物
'========================================================================
'inifile オブジェクトを含めます
#Include Once "inifile.bi"

'ファイル名前空間を設定します
Using inifobj

'作業文字列リスト(stringlist)を作成します
Dim myList As stringlist
Dim As Integer Index, ret
Dim As String sret

'新しい inifile オブジェクトを作成します
Dim myIni As iniobj = iniobj("test.ini")

If myIni.InitStatus = FALSE Then
	Print "ini オブジェクト初期化エラー"
	Sleep
	End
EndIf

myIni.WriteString "Section 1", "item1", "This is a new string."
myIni.WriteString "Section 1", "item2", "This is another string."
ret = myIni.UpdateFile()
If ret = FALSE Then
	Print "ファイル更新できません"
Else
	Print "ファイル更新しました"
EndIf
Print

Print "Section 1"
sret = myIni.ReadString("section 1", "item1", "No Value")
Print "Return String = "; sret

Print

'セクション名を見つける
If myIni.SectionExists("section 1", index) = TRUE Then
	Print myIni.Strings(index)
EndIf
If myIni.KeyExists("section 1", "item1", index) = TRUE Then
	Print myIni.Strings(index)
EndIf 
Print

myIni.WriteString "Section 2", "item1", "This is another string."
ret = myIni.UpdateFile()
If ret = FALSE Then
	Print "ファイル更新できません"
Else
	Print "ファイル更新しました"
EndIf
Print

Print "Section 2"
sret = myIni.ReadString("section 2", "item1", "No Value")
Print "Return String = "; sret

myIni.WriteString "Section 2", "item1", "Updated string."
ret = myIni.UpdateFile()
If ret = FALSE Then
	Print "ファイル更新できません"
Else
	Print "ファイル更新しました"
EndIf
Print

Print "Section 2"
sret = myIni.ReadString("section 2", "item1", "No Value")
Print "Return String = "; sret
Print

'全てのセクションを取得
Print "Reading all section names."
myIni.GetSections(myList)
For index = 0 To myList.count - 1
	Print myList.Strings(index)
Next
Print

'セクションからキーを削除
ret = myIni.DeleteKey("section 2", "item1")
If ret = TRUE Then
	Print "section 2 から item1 キーを削除"
EndIf
ret = myIni.UpdateFile()
If ret = FALSE Then
	Print "ファイル更新できません"
Else
	Print "ファイル更新しました"
EndIf
Print

Print "Section 2"
sret = myIni.ReadString("section 2", "item1", "No Value")
Print "Return String = "; sret
Print

'セクションを削除
ret = myIni.DeleteSection("section 2")
If ret = TRUE Then
	Print "section 2 を削除"
EndIf
ret = myIni.UpdateFile()
If ret = FALSE Then
	Print "ファイル更新できません"
Else
	Print "ファイル更新しました"
EndIf
Print
Print "Section 2 "
sret = myIni.ReadString("section 2", "item1", "No Value")
Print "Return String = "; sret
Print

'"section 1" からすべてのキーを取得します
myIni.GetSectionKeys "section 1", myList
Print "Section 1 Keys"
For index = 0 To myList.count - 1
	Print myList.Strings(index)
Next
Print

'"section 1" からすべてのキー/値 を取得します
myIni.GetSectionKeyValues "section 1", myList
Print "Section 1 Key/Values"
For index = 0 To myList.count - 1
	Print myList.Strings(index)
Next

Sleep

Ini-Object の説明 (iniobject.pdf の日本語訳)
Ini ファイル・オブジェクト

バージョン 0.1

Richard D. Clark

ini ファイルオブジェクトは、FreeBasic プログラムのために iniファイルを作成して、管理します。
オブジェクトを使うために、あなたのプロジェクトに #Include Once "inifile.bi" を追加してください。
オブジェクトは、iniファイルの内容を管理するために、StringList オブジェクトを使います。
iniファイル・オブジェクトは、文字列値を、読み書きするだけです。
それで、iniファイルに保存する前に、どんな数値も、文字列に変換する必要があります。

セクションとキー名は、大文字と小文字を区別しません。

iniファイルオブジェクトは、各値のディスク書き込みを避けるために、メモリ内の iniファイルを操作します。
ディスク上の iniファイルを更新するには、ディスクファイルに変更を保存する UpdateFile 関数を呼び出してください。


Ini ファイル形式
[SECTION 1]
ITEM2=This is another string.
ITEM1=This is a new string.
[SECTION 2]
ITEM1=Yet another string.

ファイルの中のセクション名は、そのまわりを [ ] 文字で囲まれています。
しかし、セクションにアクセスするときは [ ] 文字を使いません。
つまり、[SECTION 1] は、“Section 1”として呼ばれます。
セクション・キーは、= 文字の前の値です。そして、キーのデータは = 文字の後の値です。
キーの値にアクセスするために、セクション名とキーの名前の両方を渡す必要があります。
たとえば、“This is a new string.” を返すためには、
セクションの“Section 1”と、キーの“Item1”でReadString を呼びます。


必要なファイル
inifile.bi
stringlist.bi


インタフェース
定数
#Define FALSE 0
#Define TRUE (Not FALSE)


構築子宣言 (inifile As String)

オブジェクト構築子。オブジェクトを作成すると、構築子にファイル名を渡します。
ファイルが存在すると、ファイルは内部の StringList にロードされます。
例:
Dim myIni As iniobj = iniobj("test.ini")


プロパティ Version () を文字列として宣言

文字列として iniobject の現バージョンを返します。
例:
Print myIni.Version


プロパティ InitStatus () を整数として宣言

オブジェクトが、適切に初期化されると TRUE を、そうでないと FALSE を返します。
例:
If myIni.InitStatus = FALSE Then
   Print "オブジェクト初期化エラー"
   Sleep
   End
EndIf


プロパティ IniFileName () を文字列として宣言

文字列として iniファイル名を返します。
例:
myFile = myIni.IniFileName


プロパティ IniFileExists () を整数として宣言

iniファイルが存在すると TRUE を、そうでないと FALSE を返します。
例:
ret = myIni.IniFileExists


プロパティ Count() を整数として宣言

iniファイルの行数を返します。
例:
cnt = myIni.Count


関数 Strings(index As Integer) を文字列として宣言

内部の StringList に、インデックス位置の文字列を返します。
例:
Print myList.Strings(index)


関数 SectionExists (section As String, ByRef index As Integer) を整数として宣言

セクション名が存在すると TRUE そうでないと False を返します。
セクションは、 [ ] 文字なしで渡されます。
セクションのインデックスは、見つかればインデックスパラメータに返されます。
例:
If myIni.SectionExists("section 1", index) = TRUE Then
   Print myIni.Strings(index)
EndIf


関数 KeyExists (section As String, skey As String, ByRef index As Integer) を整数として宣言

セクションにキーが存在すると TRUE を、そうでないと FALSE を返します。
セクションは、[ ] 文字なしで渡します。
キーは、iniファイルの = 記号の前の値です。
キーが見つかると、キーのインデックスは、インデックス内に戻されます。
例:
If myIni.KeyExists("section 1", "item1", index) = TRUE Then
   Print myIni.Strings(index)
EndIf


関数 ReadString (section As String, skey As String, default As String) を文字列として宣言

セクション内の文字列で、skey に位置する値を返します。
これは、= の後の値です。
セクション、キー、値が見つからないと、デフォルト値が返されます。
例:
sret = myIni.ReadString("section 2", "item1", "No Value")
Print "Return String = "; sret


関数 UpdateFile() を整数として宣言

現在のiniファイルデータで、ディスクファイルを更新します。
成功した場合は TRUE を、エラーが発生した場合は FALSE を返します。
iniファイルへのすべての変更はメモリ内で発生し、
UpdateFile 関数が呼び出されるまでディスクに書き込まれません。
例:
ret = myIni.UpdateFile()
If ret = FALSE Then
   Print "ファイル更新できません"
Else
   Print "ファイル更新しました"
EndIf


関数 DeleteSection(section As String) を整数として宣言

セクションと、セクションに関連付けられたすべての キー/値 を削除します。
成功すれば TRUE を、エラーが発生すると FALSE を返します。
例:
ret = myIni.DeleteSection("section 2")
If ret = TRUE Then
   Print "section 2 を削除"
EndIf


関数 DeleteKey(section As String, skey As String) を整数として宣言

セクションの キー/値 を削除します。
成功すると TRUE を、エラーが発生すると FALSE を返します。
例:
ret = myIni.DeleteKey("section 2", "item1")
If ret = TRUE Then
   Print "section 2 から item1 キーを削除"
EndIf

Sub WriteString (section As String, skey As String, value As String) を宣言

セクション内およびキーに、文字列の値を書き込みます。
セクションまたはキーが存在しないと、それらを作成します。
例:
myIni.WriteString "Section 1", "item1", "This is a new string."


Sub GetSections (ByRef slist As stringlist) を宣言

渡された stringlist 内のすべてのセクション名を返します。
セクションがなにも見つからないと、stringlist のカウントは 0 になります。
例:
myIni.GetSections(myList)
For index = 0 To myList.count - 1
   Print myList.Strings(index)
Next


Sub GetSectionKeys (section As String, ByRef slist As stringlist) を宣言

渡された文字列リスト内の、セクション内の、すべてのキー名を返します。
セクションが見つからないか、セクションがキー名を何も含まない場合は、stringlist のカウントは 0 になります。
例:
myIni.GetSectionKeys "section 1", myList
For index = 0 To myList.count - 1
   Print myList.Strings(index)
Next


Sub GetSectionKeyValues (section As String, ByRef slist As stringlist) を宣言

渡された stringlist のセクション内の、すべての キー/値 を返します。
たとえば、ITEM1=This is a new string.
セクションが見つからないか、セクションに何もキー名が含まれない場合は、stringlist カウントが 0 になります。
例:
myIni.GetSectionKeyValues "section 1", myList
For index = 0 To myList.count - 1
   Print myList.Strings(index)
Next
 
補足 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2016-09-27
日本語翻訳:WATANABE Makoto、原文著作者:rdc & Richard D. Clark

ホームページのトップに戻る

表示-非営利-継承