Help us understand the problem. What is going on with this article?

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;%%ぁ-%%た,%%ち-%%み,%%め-%%ん

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした