トップへ戻る

Autoitプログラミング

文字列の置換

実際にプログラミングをしていくと、文字列中の一部を置き換えることが必要になってきます。

 

そんなときは StringReplace(文字列中の部分文字列を別の文字列に置き換える) 関数を使用します。

 

次のコードは文字列中の「Auto yamada」を「nagabuchi」に置き換えるサンプルです。

 

Dim $var = "こんにちはAuto yamadaです"

 

MsgBox(0, "", StringReplace($var, "Auto yamada", "nagabuchi"))

 

 

 

StringReplace は、対象となる文字列をすべてに対して置き換えをします。

 

上記のコードではわかりにくいと思いますので、次をご覧ください。

 

Dim $var = "abcこんにちはAuto yamadaですabc"

 

MsgBox(0, "", StringReplace($var, "abc", "123"))

 

 

 

上記のコードは、文字列「abc」を「123」に置き換えるコードです。

 

文字列中2か所に「abc」がありますが、すべて「123」に置き換えられています。

 

対象となる文字列をすべてに対して置き換えをしますの意味がわかったかと思います。

 

どちらかのみを置き換えしたい場合、次のようにオプションで置き換え回数を指定します。

 

Dim $var = "abcこんにちはAuto yamadaですabc"

 

MsgBox(0, "", StringReplace($var, "abc", "123", 1)); 左側の「abc」のみ「123」に置き換え

 

MsgBox(0, "", StringReplace($var, "abc", "123", -1)); 右側の「abc」のみ「123」に置き換え

 

 

 

 

※右側から置換を行うには負の数を使用します。

 

文字列中には「abc」が2か所しかないので、オプションで「2」または「-2」を指定した場合、

 

当然すべてが置き換えられてしまいますね。

 

StringReplace の5番目のオプションは、大文字小文字の区別を指定するものです。

 

デフォルトでは大文字小文字を区別しないので、必要に応じて指定しましょう。

 

ここで文字列中の一部分の指定した文字列を置き換えるにはどうしたらいいか?と疑問に思った方がいるかと思いますが、

 

後に説明する「正規表現」で実現することができますので、興味のある方は読んでみてください。

文字列の分割

実際にプログラミングをしていくと、文字列分割することも必要になってきます。

 

文字列を分割するには、StringSplit 関数を使用します。

 

次のコードは文字列「Sun,Mon,Tue,Wed,Thu,Fri,Sat」を文字「,」で分割するサンプルです。

 

 

$days = StringSplit("Sun,Mon,Tue,Wed,Thu,Fri,Sat", ",")

 

For $i = 1 To $days[0]
    MsgBox(0, "配列の総数:" & $days[0], $days[$i])
Next

 

 

 

 

StringSplit は配列を返します。

 

$days[0] には、文字列の総数(配列の総数)が代入されます。

 

上記のコードの配列の内容は次のようになります。

 

 

$days[0] = 7
$days[1] = "Sun"
$days[2] = "Mon"
$days[3] = "Tue"
$days[4] = "Wed"
$days[5] = "Thu"
$days[6] = "Fri"
$days[7] = "Sat"

 

 

 

 

サンプルを書いてみましたので、参考に研究してみてください。

 

FileGetAttrib は、ファイルの属性を表すコード文字列を返します。

 

 

 

MsgBox(0, " ファイル属性:", "C:\Windows\notepad.exe" & @CRLF & _GetAttrib("C:\Windows\notepad.exe"))
MsgBox(0, " ファイル属性:", @ScriptDir & @CRLF & _GetAttrib(@ScriptDir))
MsgBox(0, " ファイル属性:", @ScriptFullPath & @CRLF & _GetAttrib(@ScriptFullPath))

 

Func _GetAttrib($file)

 

    $attrib = FileGetAttrib($file)

 

    If @error Then
        MsgBox(4096, " エラー", " ファイルの属性を取得できません")
        Exit
    EndIf

 

    $input = StringSplit("R,A,S,H,N,D,O,C,T", ",")

 

    $output = StringSplit(" 読み取り専用 /, アーカイブ /, システムファイル /, 隠しファイル /, 一般 /, フォルダ /, オフライン /, 圧縮 /, 一時ファイル /", ",")

 

    For $i = 1 To 9

 

        $attrib = StringReplace($attrib, $input[$i], $output[$i], 0, 1)
;~  MsgBox(0, $input[$i], $output[$i])
    Next

 

    $attrib = StringTrimRight($attrib, 2)
    Return $attrib
EndFunc   ;==>_GetAttrib