LoginSignup
8
2

More than 5 years have passed since last update.

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

Posted at

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

可読性ゼロの技術的観点のみのネタですので
自分しか使わない、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;%%ぁ-%%た,%%ち-%%み,%%め-%%ん

8
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2