[前の記事]« コマンドプロンプトからのWindowsサービスの停止/開始
[次の記事]FTPでdir > a.txt ができません »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「SET, PATH, %環境変数%」索引へ
▲カテゴリー「こんなことは可能ですか?」索引へ

「配列変数」の実現方法

195) 配列変数 フロレンティア 2003/03/26(水) 00:59


こんにちは

基本的な質問で恐縮なのですが、
DOSに配列(1個の変数に複数の値を格納数)はありますでしょうか?

過去の書き込みにありましたfoeachのような処理で、
処理する値をファイルからではなくて変数からもってきたいのですが・・



196) Re:配列変数 YanaKen 2003/03/30(日) 05:41


フロレンティア さん こんにちは。

>基本的な質問で恐縮なのですが、
>DOSに配列(1個の変数に複数の値を格納数)はありますでしょうか?

 DOSにせよ、WindowsNT系のコマンド・プロンプトにせよ、環境変数には(という趣旨の質問かと思いますが)配列とかの概念は特にないです。
 擬似的に TEST1 TEST2 TEST3 みたいに連番の環境変数を使うことぐらいならできますけど、それをひとまとめに扱うようなコマンドや文法はないので、あまりうまくは扱えないと思います。

>過去の書き込みにありましたfoeachのような処理で、
>処理する値をファイルからではなくて変数からもってきたいのですが・・

 具体的な処理がよくわかんないのでなんともいえないですが、逆に「ファイル」の扱いということを少し広く考えれば、いろいろな方法が考えられるんではないかという気がしました。

 たとえば"TEST"というディレクトリを仮に作って"0"..."99"という名のファイルをそこに作り、それぞれの中身にテキストデータを格納したとすれば、実用上それは100個の要素を持つ TEST という名の配列変数と同様に扱うことができます。
 少なくともWindowsNT系ではFORコマンドで随時それらの「配列変数」の内容をバッチファイル内から参照することが可能ですし、ランダムにどれか1つを選びだすことなどもできます。

 そういう観点でなら「配列」は扱える(ただしファイルシステムの活用が前提な)わけで、しかし、それと似たことをファイル入出力抜きでやることは極めて困難だと思います。

YanaKen

[個人homepage  ]http://homepage3.nifty.com/yanaken/
[@pay窓口    ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/


205) Re:配列変数 ふぇむ 2003/04/18(金) 08:30


>過去の書き込みにありましたfoeachのような処理で、
>処理する値をファイルからではなくて変数からもってきたいのですが・・

フロレンティアさま

ふぇむです。結構強引ですが、書けなくはないですよ。
ただそこまでして配列アクセスにこだわる必要があるとは思いませんが...

ふぇむは下記のようなサブルーチンを書いてます。


:POINTER_EXPAND
rem ##
rem ## 変数の間接展開
rem ##
rem ## %1 で指定された文字列の名称の変数の内容を変数名に持つ変数の値を
rem ## %2 で指定された文字列の名称の変数にセットしてリターン
rem ##
rem ## 例: 変数 %ABC% が XYZ で、%XYZ% が 12345 の場合
rem ## call :POINTER_EXPAND ABC VALUE
rem ## の結果は %VALUE% で指定された変数に 12345 がセットされる
rem ##
rem ## ただし、^ や | 等の、コマンドライン上で意味のある分離文字を含まないこと!
set __ARG1=%1
set __ARG2=%2

set __EXPAND_1=
for /f %%z in ('echo %%%%__ARG1%%%%') do set __EXPAND_1=%%z
set __EXPAND_2=
for /f %%z in ('echo %__EXPAND_1%') do set __EXPAND_2=%%z
if "%__EXPAND_2%" == "%%%__ARG1%%%" (
rem ## %__EXPAND_2% と %%%__ARG1%%% の内容が同じ場合は
rem ## 空だったとみなして空にセット
set __EXPAND_2=
)

set %__ARG2%=%__EXPAND_2%

goto :eof



これを使うと、こんな感じでかけます。


@echo off

setlocal

set BASE=ARRAY

set ARRAY_0=ABC
set ARRAY_1=DDD
set ARRAY_2=EEE
set ARRAY_3=AFF
set ARRAY_4=ACC
set ARRAY_5=XXC
set ARRAY_6=VGG
set ARRAY_7=DGR
set ARRAY_8=BHH
set ARRAY_9=1234

for /l %%z in (0,1,9) do (
call :ARRAY_ACCESS_ROOT %%z %BASE%
)

goto :end


:ARRAY_ACCESS_ROOT
set _INDEX=%~1
call :ARRAY_ACCESS "%~1" "%~2" RET
echo index -- %_INDEX% = %RET%
goto :eof


:ARRAY_ACCESS
set __INDEX=%~1
set __BASE=%~2
set __RET=%~3

set __ARRAY_ELEMENT=%__BASE%_%__INDEX%

call :POINTER_EXPAND %__ARRAY_ELEMENT% __VALUE

set %__RET%=%__VALUE%

goto :eof


:end

endlocal

かなり強引ですよね。(^^;
 
 


カテゴリー「SET, PATH, %環境変数%」索引へ
カテゴリー「こんなことは可能ですか?」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年03月26日 09:39に投稿されたエントリーのページです。

ひとつ前の投稿は「コマンドプロンプトからのWindowsサービスの停止/開始」です。

次の投稿は「FTPでdir > a.txt ができません」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート