Autoit 入門書

Autoit の基礎 – 文字列処理

文字列処理

AutoIt で文字列を定義する場合、ダブルクォーテーションまたはシングルクォーテーションで文字列を囲みます。

次の例を見てみましょう。

$test = 'こんにちは'
$test = "こんにちは"

上記の 2つのコードは同じ意味を持ちます。

文字列中にダブルクォートまたはシングルクォートを表示したい場合、次のようになります。

$test = '"こんにちは"'
MsgBox(0, '', $test)

$test = "'こんにちは'"
MsgBox(0, '', $test)

文字列中にダブルクォートとシングルクォート両方表示したい場合は次のように、演算子「&」を使用して 2つの文字列を連結します。

$test = '"こんにちは"' & @LF & "'こんばんは'"
MsgBox(0, '', $test)

文字列の長さを取得

文字列の長さを取得するには、StringLen 関数を使用します。

この関数で注意することは、1つの文字は長さ「1」になることです。

この文字は英数字、ひらがな、カタカナ、スペース、記号にかかわらず、1つの文字の長さはすべて「1」と認識します。

$var = "こんにちは hello! 333"
$Len = StringLen($var)

MsgBox(0, " 文字列の長さ ", $Len)

文字列には、ひらがな5文字、英字5文字、記号1文字、数字3文字、スペース2つが含まれていて、結果は16になりますね。

文字列の部分取得

文字列を扱う中で、一番左側の何文字のみ、一番右側の何文字のみ、またはそれ以外の一部分のみが必要になることがあります。

さらに左右の不要な文字を削除する必要が出てくることもあります。

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

$var = "今日も元気に頑張ろう!"

;StringLeft 文字列の左端から指定した文字数分を返します

MsgBox(0, "", StringLeft($var, 3)) ; 左端から3文字のみを取得

;StringRight 文字列の右端から指定した文字数分を返します

MsgBox(0, "", StringRight($var, 3)) ; 右端から3文字のみを取得

;StringMid 文字列から取得を開始する文字の位置を指定し、指定した文字数分を取得します

MsgBox(0, "", StringMid($var, 3, 5)) ; 文字列の3文字目から5つの文字を取得

;文字列の左端から指定文字数分だけ取り除いた文字列を返します

MsgBox(0, "", StringTrimLeft($var, 3)) ; 文字列の左端から3文字削除します

;文字列の右端から指定文字数分だけ取り除いた文字列を返します

MsgBox(0, "", StringTrimRight($var, 3)) ; 文字列の右端から3文字削除します

文字列の置換

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

そんなときは StringReplace 関数を使用します。

StringReplace 関数は、文字列中の指定した文字列部分を別の文字列に置き換えます。

次のコードは文字列中の「wenbang」を「Windows 技!」に置き換えるサンプルです。

実際に実行して確認してみましょう。

$var = "初めまして、wenbangと申します。"

MsgBox(0, $var, StringReplace($var, "wenbang", "Windows 技!"))

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

上記のコードではわかりにくいと思いますので、次のコードを実行してみてください。

$var = "初めまして、wenbangと申します。"

MsgBox(0, $var, StringReplace($var, "し", "せ"))

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

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

次のようにオプションで置き換え回数を指定することもできます。

$var = "初めまして、wenbangと申します。"

MsgBox(0, $var, StringReplace($var, "し", "せ", 1))
MsgBox(0, $var, StringReplace($var, "し", "せ", -1))

1つめは、オプションで「1」を指定していますので、左から 1つの対象となる文字列を置き換えるということになります。

オプションで「2」を指定すると、左から 2つの対象となる文字列を置き換えるということになります。

2つめは、オプションで「-1」を指定していますので、右から 1つの象となる文字列を置き換えるということになります。

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

文字列の分割

文字列を分割するには、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"

ファイルの属性を取得するサンプルを書いてみましたが、コードの意味は次第に分かっていきますので、ここでは詳しく説明はしません。

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

正規表現

正規表現は、プログラミングには欠かせない存在になります。

複雑な文字列から指定したパターンにマッチした文字列の検索、置き換えができます。

Autoit 正規表現 – 文字列から指定したパターンの文字列を検索、置き換え

コメント(降順)

タイトルとURLをコピーしました