目次
その他の関連しそうな記事
一次元配列
他の言語を使用している方はバッチファイルで配列を使用したいと思うかもしれません。しかし、バッチには配列という機能はありません。ただし、「配列もどき」を使うことはできます。その使用方法をここでは、解説していきます。
まずは確認ですが、配列は以下のような形をしています。
Array[0]
Array[1]
Array[2]
Array[3]
…
この「Array[0]」という名前をそのまま変数名に使ってしまうことで配列を表現しようというやり方です。Array[1], Array[2]…もそれぞれそのような名前の変数であって、けして「Array」という配列に複数の値や文字列を格納するわけではありません。なので、「もどき」です。
これだけではピンとこない人もいるでしょう。次節から詳しく使い方をみていきます。
配列に数字を格納する
1から10までの数字を変数「array[0]」から「array[9]」に代入することを考えましょう。これは「for」ループを使ってこのように書けます。
1 2 3 4 5 6 7 8 9 |
@echo off for /l %%n in (0,1,9) do ( set /a array[%%n]=%%n+1 ) echo %array[1]% echo %array[2]% echo %array[9]% |
※「for」文については「for(繰り返し処理) -コマンド別解説-」で詳しく解説しています。
3行目から5行目にかけて「for」ループを記述しています。「%%n」には「for」ループによって0から9の数字が入ります。それをarray[%%n]のように、変数名の一部に使うことによって配列のような連番が使われている変数を作り出しています。そこに「%%n+1」として、1から10までの数字を代入しています。
参照するには7行目からの「%array[?]%」のようにします。「array[?]」は配列もどきのただの変数名であるため、通常の変数と同様に「%」で囲まなくてはいけません。
以下は実行結果です。
ファイルから文字列を格納する
次は、ファイルの内容を配列に代入する例です。以下のように文字列が並んでいるファイルから文字列を読み取り配列もどきの変数「string[?]」に格納します。
【九州の県.txt】
以下、このファイル内の文字列を上から順に配列「string[?]」に代入していくプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@echo off setlocal enabledelayedexpansion set n=0 for /f %%s in (九州の県.txt) do ( set string[!n!]=%%s set /a n=n+1 ) echo %string[0]% echo %string[1]% echo %string[2]% echo %string[3]% echo %string[4]% echo %string[5]% echo %string[6]% endlocal |
やっていることは前節と同様ですが、今回は配列もどきに代入する文字列をファイルから読み込んでいます。
以下は実行結果です。
「setlocal enabledelayedexpansion」「endlocal」はforループ内で変数の値を変化させるために使います。詳しくは、「forループ内で値を変化させる -やりたいことから検索-」を参照して下さい。
二次元配列
配列に数字を格納する
二次元配列も一次元配列と同様です。以下のような名前の変数に文字列もしくは値を代入していきます。
array[0][0]
array[0][1]
array[0][2]
array[1][0]
…
ここでは、「for」ループを使用して文字列「00」、「01」…「43」、「44」を配列「array[?][?]」に格納します。
1 2 3 4 5 6 7 8 9 10 11 |
@echo off for /l %%n in (0,1,4) do ( for /l %%m in (0,1,4) do ( set array[%%n][%%m]=%%n%%m ) ) echo %array[0][0]% echo %array[0][1]% echo %array[4][4]% |
以下、実行結果です。
基本的に一次元配列のときと同様ですが、二次元配列なので「for」の二重ループを使っています。ようは、「array[?][?]」という変数名を使えば、配列っぽくなるというだけの話です。
ファイルから文字列を格納する
今度は、以下のようなファイルから文字列を読み取り「ken[?][?]」という二次元配列に格納します。
今の場合、7行2列の配列を考えればよいので、「ken[1~7][0]」に一行目(県名)を代入し、「ken[1~7][1]」に数字を入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@echo off setlocal enabledelayedexpansion set n=0 for /f "tokens=1,2" %%a in (ken_num.txt) do ( set ken[!n!][0]=%%a set ken[!n!][1]=%%b set /a n=n+1 ) echo %ken[0][0]%, %ken[0][1]% echo %ken[1][0]%, %ken[1][1]% echo %ken[6][0]%, %ken[6][1]% endlocal |
8行目で「%%a」に入っている県名を変数「ken[?][0]」に代入し、9行目で「%%b」に入っている数字を変数「ken[?][1]」に代入しています。
以下、実行結果です。
ここでは、2次元配列までしか紹介しませんでしたが、3次元、4次元…となっていっても変数の名前を「array[?][?][?]」、「array[?][?][?][?]」としていけばよいだけです。
コメント