トップへ戻る

Autoitプログラミング

ファイルの読み取りと書き込み

AutoIt の内部関数でファイルの読み取りと書き込みが可能です。

 

機能はAPIには劣りますが、簡単で解り易くなっています。

 

ファイルの読み取りと書き込みを行う前に、 Windows のファイルには拡張子という

 

ファイルの種類を識別するための文字列があるということを覚えておきましょう。

 

Windows の一般的な実行可能なファイルの拡張子は .EXE と .COM です。

 

この章では拡張子 .EXE、 .TXT(テキストファイル) 、.INI(設定ファイル)の読み取りと書き込み、

 

およびファイルの削除を勉強していきます。

INIファイルの読み取りと書き込み、削除

INIファイルの読み取り、書き込み

 

AutoIt でINIファイルの読み取り、書き込みを行うには、内部関数の IniWrite 、 IniRead を使用します。

 

IniRead:.INIファイルから値を読み取ります。

 

形式:IniRead ( "ファイル名", "セクション", "キー", "デフォルト値" )

 

IniWrite:.INIファイルに値を書き込みます。

 

形式:IniWrite ( "ファイル名", "セクション", "キー", "書き込みまたは変更する値" )

 

この2つの関数には共に4つのパラメータがあります。

 

三つ目までは同じですが、4つ目のパラメータが違います。

 

書き込みをする場合は"書き込みまたは変更する値" 、読み取りをする場合は"デフォルト値"。

 

"デフォルト値" = 要求したキーが見つからなかった場合、デフォルト値が返されます。

 

つまり、何も指定せず "" のみにすれば、指定したキーのデフォルト値を取得することができということです。

 

INIファイルはアプリケーションの設定ファイルとしてよく使用するものなので、必ず覚えておきましょう。

 

この2つの関数は難しくはありません。

 

次のサンプルをご覧ください。

 

; デスクトップに test.ini ファイルを作成し、データを書き込みます。

 

IniWrite(@DesktopDir & "\test.ini", "setup", "test", "haha")

 

; 先ほど書き込んだデータを test.ini ファイルから読み取ります。

 

$a1 = IniRead(@DesktopDir & "\test.ini", "setup", "test", "")

 

; 存在しないデータを読み取ります。

 

$a2 = IniRead(@DesktopDir & "\test.ini", "setup", "test2", "デフォルト")

 

MsgBox(0, "", "testキーのデータ: " & $a1 & @LF & "test2キーのデータ: " & $a2)

 

 

; test.ini ファイルから読み取ります。

 

$a1 = IniRead(@DesktopDir & "\test.ini", "setup", "test", "こんにちは")

 

MsgBox(0, "", "testキーのデータ: " & $a1)

 

 

 

 

実際に実行し、結果を確認してみましょう。

 

$a2 には、パラメータ4で指定した”デフォルト” が代入されているのがわかると思います。

 

これは $a2 では存在しないキーのデータを読み取っているので、失敗しているのが原因です。

 

一番最後のコードではパラメータ4に ”こんにちは” を指定していますが、$a1 には ”haha” が代入されています。

 

これは $a1 で要求したキーが存在し、読み取りに成功しているため ”こんにちは” は無視され、存在するデータが代入されているのです。

 

デスクトップに作成された test.ini ファイルを開いて内容を確認してみましょう。

 

INIファイルの値を削除

 

INIファイルのキー、データを削除するには IniDelete を使用します。

 

IniDelete 関数:INIファイルから値を削除します。

 

形式:IniDelete ( "ファイル名", "セクション" [, "キー"] )

 

IniDelete には3つのパラメータがあり、3番目は省略可能です。

 

3番目を省略すると指定したセクションを削除することになります。

 

; test キーを削除します。

 

IniDelete(@DesktopDir & "\test.ini", "setup", "test")

 

; セクション setup を削除します。

 

IniDelete(@DesktopDir & "\test.ini", "setup")

 

 

 

 

セクション名の読み取り

 

IniReadSectionNames 関数:INIファイル内のすべてのセクション名を読み取ります。

 

形式:IniReadSectionNames ( "ファイル名" )

 

 

$var = IniReadSectionNames(@WindowsDir & "\win.ini")

 

If @error Then

 

    MsgBox(4096, "", "INIファイルの読み取りに失敗しました")

 

Else

 

    For $i = 1 To $var[0]
        MsgBox(4096, "", " セクション名 :" & $var[$i])
    Next

 

EndIf

 

 

 

 

キーおよびデータの読み取り

 

IniReadSection 関数:INIファイルの指定したセクション下から全てのキー、データを読み取ります。

 


$var = IniReadSection(@WindowsDir & "\win.ini", "Mail")

 

If @error Then

 

    MsgBox(4096, "", "INIファイルの読み取りに失敗しました")

 

Else

 

    For $i = 1 To $var[0][0]
        MsgBox(0, "Mail", "キー名 : " & $var[$i][0] & @LF & " データ : " & $var[$i][1])
    Next

 

EndIf

 

 

 

返し値は2次元配列です。

 

$var[n][0] がキー名、$var[n][1] がデータになります。(n とは1〜それ以上)

 

注意

 

IniReadSection と IniReadSectionNames は Win9x系との互換性のため、始めの32767文字までしか読み取ることができません。

 

拡張子

 

INIファイルの読み取り、書き込みは必ずしも拡張子「.INI」でなければならないということはありません。

 

TXTファイルでもEXEファイルでも内容がINIファイルの形式であれば読み書きすることができます。

TXTファイルの読み取りと書き込み、削除

INIファイルの読み取り、書き込み

 

AutoIt でテキストファイルの読み取り、書き込みを行うには、次の内部関数を使用します。

 

FileOpen 、 FileClose 、 FileWrite 、 FileWriteLine 、 FileRead 、 FileReadLine 。

 

これらの関数の詳細はヘルプファイルをご覧ください。

 

; テキストファイルの最後にテキストを追加します。

 

FileWriteLine(@DesktopDir & "\test.txt", "一行目のテキスト")

 

; さらにテキストファイルの最後にテキストを追加します。

 

FileWrite(@DesktopDir & "\test.txt", "2行目のテキスト")

 

; テキストファイルから最初の4文字を読み取ります。

 

$var1 = FileRead(@DesktopDir & "\test.txt", 4)

 

; 2行目のデータを読み取ります。

 

$var2 = FileReadLine(@DesktopDir & "\test.txt", 2)

 

MsgBox(0, "", "最初の4文字: " & $var1 & @LF & "2行目のデータ : " & $var2)

 

 

 

 

上記のコードを実行すると気付くと思いますが、「最初の4文字」を読み取るためにパラメータ2で4を指定しているのに

 

結果は「一行」となっていますね。

 

これはテキストファイルの文字コードがANSIであるため。

 

上記のサンプルでは直接ファイルを開いていますが、この書き方では処理速度が遅くなります。

 

ファイルの読み書きを行う場合、ファイルハンドル(OSがどのファイルかを識別するのに用いる情報)を使用することをおすすめします。

 

 

$file = FileOpen(@DesktopDir & "\test.txt", 0)

 

;~ $file にはファイルハンドル情報が入っています。

 

; ファイルが読み取り可能かどうかをチェック
If $file = -1 Then
    MsgBox(0, "エラー", "ファイルを開けません")
    Exit
EndIf

 

MsgBox(0, "すべてのデータ", FileRead($file))

 

FileClose($file) ; 必ずファイルハンドルを閉じてください。

 

 

 

 

上記のコードではテキストファイルを FileOpen 関数、モード0(読み取り)で開いています。

 

読み取りモードで開いたファイルには、FileWrite 等でデータを書き込むことはできません。

 

また、書き込みモードで開いたファイルを読み取ることはできません。

 

 

FileOpen 関数を使用してファイルを開いた後は、必ずFileClose 関数でファイルハンドルを閉じてください。

 

次のサンプルは間違った書き方の見本です。

 

まず次のコードを見てどこが間違っているか確認してみましょう。

 

 

$file = FileOpen(@DesktopDir & "\test.txt", 2 + 8)

 

If $file = -1 Then
    MsgBox(0, "エラー", "ファイルを開けません")
    Exit
EndIf

 

FileWriteLine($file, "行")

 

 

FileWrite($file, "t")

 

MsgBox(0, "すべてのデータ", FileRead($file))

 

FileClose($file)

 

 

 

 

どうでしょうか?FileRead でデータを読み取り、メッセージボックスを表示していますが、内容が空白ですね。

 

原因は既に上で説明していますので、わからない場合はもう一度このページの始めから読み直してみてください。