- ベストアンサー
ASPで配列を作る方法
初歩的なことなのでしょうが…。 ASPでパスを指定して、そこにあるファイル名を全て取得し、 そのファイル名を配列に落としたいのですが。 (ファイル名の取得まではできています。) どうやったら良いのでしょうか?
- adrie
- お礼率60% (6/10)
- Microsoft ASP
- 回答数4
- ありがとう数2
- みんなの回答 (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は必要なくなるような気がするのですが、ダメなのでしょうか?
関連するQ&A
- ASPでサーバーサイドの配列をクライアントサイドへ引渡し
表記の件の実装方法が分からず、非常に困っています。 どなたかご教授願います。 ■開発環境 ASP(VBScript) ■内容 サーバーサイドでDBから取得した内容を 配列に保持しているのですが、その内容をクライアントサイド処理で 取得したいのですが、どのようにすればいいのか分かりません。 サーバーサイドの配列名 arrSvr() とした場合、 "<%=arrSvr(1)%>"などとすれば取得は出来るのですが、 配列のインデックスを動的に変更して取得したいのですがうまく行きません。 "<%=arrSvr(" & i & ")%>"などとしてもエラーとなってしましますし、 クライアントサイドの配列に一度配列ごと突っ込もうとして arrClt = "<%=arrSvr%>" のようにしてもダメでした。 どなたか詳しい方、どうぞよろしくお願いします。
- 締切済み
- HTML
- 配列のソートについて
Array( [0] => ../images/19991221.gif [1] => ../images/19980801.png [2] => ../2007/20070402.jpg [3] => ../2009/20091231.jpg [4] => ../../images/hoge/19950101.jpg [5] => ../piyo/19951231.jpg ) 配列(階層の異なるパス)を、拡張子を除いたファイル名「20091231、20070402…」で、配列のまま、降順ソートしたいのですが、どうすればよいでしょうか? ファイル名だけを並べたいわけではなく、 ファイル名降順で、配列をソートしたいです。 ※このパスは後で使う予定のため
- ベストアンサー
- PHP
- [ASP+SQLserver]列名の取得・・・
こんにちわ!皆さん!! 今日は、ASPで列名を取得する方法が見つからず悩んでします。 例えば Syohin = rsSyohinMaster("商品名") とすれば、テーブル内の「商品名」という列名に入っているデータをSyohinに格納できますよね? そうではなくて・・・ Retsumei = rsSyohinMaster(1) とかやったら、 Retsumei に 「()」内で指定した番目にある列名を(例えば:商品名)格納 したいんです! そういうコマンドないですか? 実際は指定されたテーブルの列名を配列に一気に取り込む処理を考えています。 いかがでしょうか? 宜しくお願い致します!
- ベストアンサー
- Microsoft ASP
- 配列どうしで同じ値があれば取り除きたいのですが
ディレクトリtest内に存在するファイル名(例えば、file1、file2、....)を調べ、 同じものが存在しなければある場所からcURLにてデータを取得、という事をしようと考えております。 ここでは前もって$namesにその取得しようとしているデータ名が配列にて入っているとします。 そこでManualにあった通り、(簡略化していますが)以下のように書いたのですが、 この方法では、 1. $entry、つまり存在するファイルの数だけwhile()によって回されその度にget_text()が呼ばれて重複してしまう 2. $entryによってwhile()で回されている際、$entry=file1の時はfile1は取得されないが、 このwhile()の際に存在するはずのfile2まで取得プロセスが働くことになる 、と思います。 このような場合、どのようなスクリプトを書けば宜しいのでしょうか? アドバイスを頂ければと思います。 宜しくお願い致します。 define('DS', DIRECTORY_SEPARATOR); //簡易的なため$urlsは$names[$d]に沿ったurl情報を格納しているとします if ($handle = opendir($directory_path)) { $d = 0; while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { if (!file_exists($directory_path . DS . $names[$d] . ".txt")) //またはif($entry == $directory_path . DS . $names[$d] . ".txt") { $text = get_text($urls); //<-存在しないテキストを新たに取得するcURL自己関数 } } } $d++; } closedir($handle); $names内のデータ名と、test内のファイル名を検証し、同じものがあれば配列$names内から削除 というような事も考えましたが、 foreach()にて$namesないから削除していくやり方では、一般配列の整合性が崩れ foreach()の繰り返し番号によっては消えない場合もあるのではないかと思い、分かりませんでした。
- ベストアンサー
- PHP
- ファイルの一覧を取得して配列に入れるには(VB2005)
VisualBasic2005でプログラミングの勉強を始めましたが、配列のところで躓いてしまいました。 現在やりたいことは、ListBoxとDataGridViewにそれぞれ取得したファイルのファイル名を一覧を表示し、項目クリックでそのファイルを開くことです。(DataGridViewのほうは、ファイルの一覧だけでなく、項目を分けてパスやファイルサイズなども表示させたいと思います)。 まずListBoxのほうですが、検索して次のような方法が見つかりました。 ListBox1.DataSource = _ My.Computer.FileSystem.GetFiles("パス",FileIO.SearchOption.SearchTopLevelOnly,"*.拡張子") そのままコピーして利用してみたのですが、直接リストボックスに一覧を取得し、パスも含めた文字列が表示されてしまいました。リストボックスにはパスと拡張子を除いたファイル名だけを一覧表示したいです。それで、各文字列を操作するためにはまず取得したファイル一覧を配列かコレクションに格納しなければならないと思うのですが、この方法がどうしてもわかりません(また、配列とコレクションではどちらが相応しいでしょうか)。 また、DataGridViewでもパスやサイズも含めた一覧を表示し、同様にクリックで開けるようにしたいと思います。この場合も、まず多次元配列に検索結果を入れると思うのですが、データを入れた配列から、DataGridViewに表示させる方法も合わせて教えていただきたく思います。 以上のことについて、アドバイスまたは方法をご教授ください<(_ _)> 検索していると、 DataGridView1.datasource = DataTable ListBox1.datasource = ~~~ などという例が多いのですが、DataTableやdatasourceと配列はどのような関係にあるのでしょうか?DataTableのデータを配列に入れたり、またその逆だったりは簡単に出来ないものでしょうか。 このあたりがどうも理解不足で、応用力もつけたいので、どのあたりを勉強すればよいのかも教えて頂けると助かります。初心者用の参考書と、逆引き大全500は一通り読んでみました。
- 締切済み
- Visual Basic
- asp.net コーディング方法
asp.net初心者です。 あるコーディングをしたのですが、サーバーサイドでどう記述したらよいのかわからず悩んでいます。 内容は以下のとおりです。 TBLAから年をグループ化し降順に7年分取得します。 select TOP 7 YYYY from TBLA group by YYYY desc これをgridviewのヘッダーに表示したいのです。 gridviewの列は7列。例えば上記クエリで取得した値が 2012、2011、2010、2009、2008、2007、2006 だとすると gridviewのヘッダーは左から2006、2007、2008、2009、2010、2011、2012と 表示したいです。 ※取得した年は7年分あるとは限りません。 配列を使って下記のように考えたのですが、asp.netでの記述がわからず困っています。 記述方法、またはもっといい案があればご教授をお願いします。 <私の考えた案> (1)クエリにて年を取得 (2)配列に(1)の年を配列にセットする arry(1)=2012 ~ arry(7)=2006 (3)for文にてヘッダーにセット yearcnt=(1)の件数 for i = yearcnt to 1 step -1 lblHeder1_(i).text=arry(i) next ※ヘッダーのラベル名は1列目:「lblHeder1_1」、2列目:「lblHeder1_2」3列目:「lblHeder1_3」・・・と続きます。 lblHeder1_(i)の(i)を変数にする方法もわかりません。
- ベストアンサー
- Microsoft ASP
- ASP.NETで、配列は使えないのでしょうか?
ASP.NETで、配列は使えないのでしょうか? IMAGEタグを、100個ほど使いたい状況です。 イメージタグのIDに、IMAGE1、IMAGE2などをしていするのではなく、IMAGE(i)のようにしたいのですが、変数宣言がうまくいきません。 Dim IMAGE() という書き方や、 Var IMAGE()などの書き方は試したのですが、うまくいきませんでした。 どのような書き方をすれば良いのでしょうか? よろしくお願いします。
- ベストアンサー
- Microsoft ASP
- フルパスからファイル名取得の方法
指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用してファイル名を取得しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。 VBを始めたばかりでよく分からないのでアドバイスをお願いします。 Dim imageDir As String = fbd.SelectedPath ' 指定フォルダまでのディレクトリ Dim bmpFiles As String() = _ System.IO.Directory.GetFiles(imageDir, "*.bmp") 'フルパス Dim bmpFileName As String = _ Path.GetFileName(bmpFiles) ←bmpFilesで上記エラー
- ベストアンサー
- Visual Basic
- ASPについて
ASPの参考書をみながらサンプル通りに プログラムを入力し、PWSで実行したら以下のようなメッセージがでてきてしまいました。 また、いくつかのファイルをつくり関連付けようとしても どのファイルにも以下のメッセージが出てきてしまい 関連付けれません。何が原因なんでしょうか。教えてください。 [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。
- 締切済み
- Microsoft ASP
- [asp/vbs]FileExistsのパスの指定方法について教えて下
[asp/vbs]FileExistsのパスの指定方法について教えて下さい。 下記のような記述をした場合、インターネット上にファイルは存在しているのに 「無し」と判断されてしまいます。("ファイルがありません"と表示される) 表示されるという事はasp自体は動いているのでしょうが、肝心のパスの設定が わからない状態です。 <%@ Language=VBScript %> -------中略------- <% Set objFso = Server.CreateObject("Scripting.FileSystemObject") If objFso.FileExists("image/test.jpg") Then Response.Write "ファイルが存在します" End If Response.Write "ファイルがありません" %> このaspファイルが置かれているディレクトリ上にtest.jpgを置き、 If objFso.FileExists("test.jpg") Then と記述しても、やはり"ファイルがありません"と表示されてしまいます…。 また、フルパス(http://www~~test.jpg)と表示しても駄目でした。 おそらく根本的な問題だとは思うのですが、 どのように表記したら良いか、教えて頂けると助かります。
- ベストアンサー
- Microsoft ASP
お礼
続けてご回答ありがとうございます。 >> 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です…。