- ベストアンサー
ASPで配列を作る方法
初歩的なことなのでしょうが…。 ASPでパスを指定して、そこにあるファイル名を全て取得し、 そのファイル名を配列に落としたいのですが。 (ファイル名の取得まではできています。) どうやったら良いのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> dim arrFileName() > arrFileName() =Array(objFiles.Count) > としたら、redimは必要なくなるような気がするのですが、ダメなのでしょうか? ダメです(笑) 上手くいきそうに見えますが文法に誤りがありますね どこがどう悪いのかは実際に試してみましょう。 各命令のリファレンスは参考URLから「VBScriptドキュメント」へ進むとオンラインドキュメントを参照できます。 ちなみに文法エラーを直してもadrieさんの希望する処理はしてくれなかったりします。 それも何故かはドキュメントを隅々まで目を通して調べてみましょう。 >ちなみに私はこの後更に、今作ったファイル名の配列から特定の文字列を含んだ >ファイル名のみを抜き出して別の配列を作りたいのです。 >難しいでしょうか? 一度全て配列に落とし込んだ後、InStr関数でファイル名をチェックして配列に落とし込めばOKですよ。 #2のソースに手を加えて作ってみました。 <%@ LANGUAGE="VBScript" %> <% Option Explicit Const m_GetFileDir = "c:\InetPub\wwwroot" Dim objFso Dim objFolder Dim objFiles Dim strFileName Dim arrFileName() Dim arrFileName2() Dim i, j '--- 指定ディレクトリ内の全ファイル名を arrFileName() へ Set objFso = Server.CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder( m_GetFileDir ) Set objFiles = objFolder.Files ReDim Preserve arrFileName(objFolder.Files.Count-1) i = 0 For Each strFileName In objFiles arrFileName(i) = strFileName i = i + 1 Next Set objFiles = Nothing Set objFolder = Nothing Set objFso = Nothing '--- 更にGIFファイルだけを arrFileName2() へ j = 0 For i = LBound(arrFileName) To UBound(arrFileName) If InStr(LCase(arrFileName(i)), ".gif") > 0 Then ReDim Preserve arrFileName2(j) arrFileName2(j) = arrFileName(i) j = j + 1 End If Next '--- arrFileName2() を出力 For i = LBound(arrFileName2) To UBound(arrFileName2) Response.Write arrFileName2(i) & "<br>" Next %> 毎回 ReDim Preserveで配列の要素数増やすのはあまり好ましい方法ではありませんが、参考になれば
その他の回答 (3)
- hequil
- ベストアンサー率65% (242/372)
>Instrの代わりにMidとかLeftとかでもできますよね! >(ファイル名に規則があれば。) もちろん可能です。 「abcから始まる、拡張子 pngのファイル名を抽出」ってのもご想像の通りの方法で可能です。 >昨日、結局VBScriptのリファレンス買っちゃいました。 >こういうところは、ASPの中にVBScriptを記述していることになるんですよね? >いまいち、ASPとVBScriptの区別が良く分かっていないadrieです…。 そう理解して間違いないと思います。 ASPってのはプログラミング言語ではなく、そういう仕組みの名称ですね。 で、実際の開発言語としてVBScript, JScriptなどを使用するようになっています。 CGIも同じですよね CGIもあくまで仕組みの名前であって、開発言語としてはPerlやC言語などが使われていますよね。 ・・・余計混乱させてしまったらすいません。
お礼
> ・・・余計混乱させてしまったらすいません。 大丈夫です。私もそのように理解していますので。 ただ、書籍を色々読んでいると混乱してきますね。 (ASPを言語のように解説している本もあるし、前出のInstrなどの 関数がASPの関数のように書いている本も結構ありますよね?) ASPの組み込みオブジェクトとVBScriptの組み込みが違うのは 理解しやすいのですが、関数などはどちらの持っている機能なのかが 分かりづらいです。 昨日からやっているファイルオブジェクトに関するGetFolderなどは ASPのリファレンスにもVBScriptのリファレンスにも載っていました。 (ASPのリファレンスには、上記Instrなどの関数は載っていないので、 純粋にASPで持っている機能のみを書いてあるんだな、と信用しているのですが。) でもまぁ、基本的にはASPという環境(仕組み)の中でVBScriptを使って スクリプトを書いている、という認識で良いということですよね。 ありがとうございました。
補足
書いていただいたスクリプトを参考にして、やりたいことができました。 ありがとうございました! またよろしくお願いします。
- hequil
- ベストアンサー率65% (242/372)
サンプル作っている間に先越されちゃいました(笑) せっかく作ったの一応 <%@ LANGUAGE="VBScript" %> <% Option Explicit Const m_GetFileDir = "c:\InetPub\wwwroot" Dim objFso Dim objFolder Dim objFiles Dim strFileName Dim arrFileName() Dim i Set objFso = Server.CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder( m_GetFileDir ) Set objFiles = objFolder.Files ReDim Preserve arrFileName(objFolder.Files.Count-1) i = 0 For Each strFileName In objFiles arrFileName(i) = strFileName i = i + 1 Next Set objFiles = Nothing Set objFolder = Nothing Set objFso = Nothing For i = LBound(arrFileName) To UBound(arrFileName) Response.Write arrFileName(i) & "<br>" Next %> インデントに全角スペース使ってますが 言うまでもなく、実際には半角スペースかタブを使って下さいね。 参考になれば
補足
丁寧にサンプル付きの回答ありがとうございます。 ここまでは分かりました! ところで、先にご回答いただいた方にも書いたのですが、 どこを調べても動的配列にはReDimと書いてありますよね? 今回のような場合、上記例で言うと、 dim arrFileName() arrFileName() =Array(objFiles.Count) としたら、redimは必要なくなるような気がするのですが、ダメなのでしょうか? ちなみに私はこの後更に、今作ったファイル名の配列から特定の文字列を含んだ ファイル名のみを抜き出して別の配列を作りたいのです。 難しいでしょうか?
- yanmaa
- ベストアンサー率45% (207/457)
ASPという事はサーバサイドのVBScriptで書かれていると思いますが Dem 配列名() で宣言しておき ReDim Preserve 配列名(配列の大きさ) で配列の大きさを変える(Preserveを指定すると配列の中身を初期化しない) 詳しくは参考URLにて確認願います。
補足
回答ありがとうございます。 上記のお答えは分かるのですが、どこを調べても動的配列にはReDimと書いて ありますよね。 そこも私は疑問なのですが、今回のような場合、 dim 配列名a 配列名a=Array(filesコレクション名.Count) としたら、redimは必要なくなるような気がするのですが、ダメなのでしょうか?
お礼
続けてご回答ありがとうございます。 >> dim arrFileName() >> arrFileName() =Array(objFiles.Count) >> としたら、redimは必要なくなるような気がするのですが、ダメなのでしょうか? > ダメです(笑) > 上手くいきそうに見えますが文法に誤りがありますね >> arrFileName() =Array(objFiles.Count) じゃなくて arrFileName=Array(objFiles.Count) ですね。失礼しました。これで一見通りました。 が、配列には最後のファイル名しか入っていませんでした。(泣) やっぱりダメですか…。 諦めてredim使ってみます。 その後の手順もありがとうございます! Instrの代わりにMidとかLeftとかでもできますよね! (ファイル名に規則があれば。) 昨日、結局VBScriptのリファレンス買っちゃいました。 こういうところは、ASPの中にVBScriptを記述していることになるんですよね? いまいち、ASPとVBScriptの区別が良く分かっていないadrieです…。