Windows
bat

For文のtokensの最大値は31、とそれを超える使い方

More than 3 years have passed since last update.

「最初に言っておく!これは、かーなーり、酷い!」

可読性ゼロの技術的観点のみのネタですので

自分しか使わない、2度と変更することは無い、

どーしてもこの方法じゃないと出来ない場合にのみ使って下さい。

For文を使ってdelimsに「,」を指定すると

CSVファイルの指定の列の内容が取り出せます。

変数を%%Aで指定すれば、

エクセルのように%%A=A列の感覚で使えます。

問題になるのは、%%A変数の場合に

27列目の変数の指定が「[」になるので

別の文字を割り当てる方法が無いかなと

For文の仕様を見ていたら

変数名は単一の文字を指定と書いてあったので

試したら、半角数字・漢字・半角カナが使えました。

なので%%アで指定すれば、26列超えが出来ます。

だがしかし

tokensの最大値は31という制限があるので

半角カナ変数を使っても、31列が限界になってしまいます。

そこで

tokensの継ぎ足し機能を使って

なんとか81列まで指定出来ました。

これ以上取り出したい場合は

GAWKを使ったり、UNIXのCUTに該当する

「CSV-Preprocessor Home Page」にある

「CSVファイル項目抽出プログラム」で

必要な列だけ取り出してきてから

編集する方が現実的だと思います。

何かご指摘・ご意見などございましたら、コメントでお願いいたします。

┏━━━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓

┃ %%0 ┃ 0┃ 1┃ 2┃ 3┃ 4┃ 5┃ 6┃ 7┃ 8┃ 9┃←配列は0から開始派の方にお薦め。バッチ内の%0とは区別されます。

┣━━━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓

┃ %%① ┃①┃②┃③┃④┃⑤┃⑥┃⑦┃⑧┃⑨┃⑩┃⑪┃⑫┃⑬┃⑭┃⑮┃⑯┃⑰┃⑱┃⑲┃⑳┃←エクセルはR1C1の方にお薦め

┣━━━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┳━┳━┳━┳━┳━┓

┃ %%A ┃ A┃ B┃ C┃ D┃ E┃ F┃ G┃ H┃ I┃ J┃ K┃ L┃ M┃ N┃ O┃ P┃ Q┃ R┃ S┃ T┃ U┃ V┃ W┃ X┃ Y┃ Z┃普通

┣━━━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┳━┓

┃ %%ア ┃ ア┃ イ┃ ウ┃ エ┃ オ┃ カ┃ キ┃ ク┃ ケ┃ コ┃ サ┃ シ┃ ス┃ セ┃ ソ┃ タ┃ チ┃ ツ┃ テ┃ ト┃ ナ┃ ニ┃ ヌ┃ ネ┃ ノ┃ ハ┃ ヒ┃ フ┃

┣━━━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫

┃列の値┃ 1┃ 2┃ 3┃ 4┃ 5┃ 6┃ 7┃ 8┃ 9┃10┃11┃12┃13┃14┃15┃16┃17┃18┃19┃20┃21┃22┃23┃24┃25┃26┃27┃28┃

┗━━━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛

rem /; 継ぎ目無し

for /F "tokens=1-10 delims=," %%0 in ("1,2,3,4,5,6,7,8,9,10") do echo;%%0-%%9

rem /; 0x8740 - 0x8753 ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳

for /F "tokens=1-20 delims=," %%① in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20") do echo;%%①-%%⑳

for /F "tokens=1-26 delims=," %%A in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26") do echo;%%A-%%Z

for /F "tokens=1-31 delims=," %%ア in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31") do echo;%%ア-%%マ

rem /;

rem /; 継ぎ目有り 1-46

rem /; ※ 半角の小書きでない「ア」0xB1から使う(小書きは「ァ」0xA7)

rem /; 継

rem /; ア,イ,ウ,エ,オ,カ,キ,ク,ケ, コ, サ, シ, ス, セ, ソ, タ, チ, ツ, テ, ト, ナ, ニ, ヌ, ネ, ノ, ハ, ヒ, フ, ヘ, ホ, マ, ミ, ム, メ, モ, ヤ, ユ, ヨ, ラ, リ, ル, レ, ロ, ワ, ン, ゙, ゚

rem /; 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46

rem /;

for /F "tokens=1-31* delims=," %%ア in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46") do for /F "tokens=1-15 delims=," %%ム in ("%%ミ") do echo;%%ア-%%マ,%%ム-%%゚

rem /;

rem /; 継ぎ目有り 1-62

rem /; ※ 7が小書きの「ァ」0xA7、17が小書きでない「ア」0xB1

rem /; 継

rem /; 。,「,」,、,・,ヲ,ァ,ィ,ゥ, ェ, ォ, ャ, ュ, ョ, ッ, -, ア, イ, ウ, エ, オ, カ, キ, ク, ケ, コ, サ, シ, ス, セ, ソ, タ, チ, ツ, テ, ト, ナ, ニ, ヌ, ネ, ノ, ハ, ヒ, フ, ヘ, ホ, マ, ミ, ム, メ, モ, ヤ, ユ, ヨ, ラ, リ, ル, レ, ロ, ワ, ン, ゙, ゚

rem /; 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62

rem /;

for /F "tokens=1-31* delims=," %%。 in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62") do for /F "tokens=1-31 delims=," %%チ in ("%%タ") do echo;%%。-%%ソ,%%チ-%%゚

rem /;

rem /; 継ぎ目有り 1-81

rem /; ※ 全角は「ァ」は、[ァ~ミ]で文字列が途切れる

rem /; 継 継

rem /; ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん

rem /; 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81

rem /;

for /F "tokens=1-31* delims=," %%ぁ in ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81") do for /F "tokens=1-31* delims=," %%ち in ("%%だ") do for /F "tokens=1-19 delims=," %%め in ("%%む") do echo;%%ぁ-%%た,%%ち-%%み,%%め-%%ん