初歩的なことなのでしょうが…。
ASPでパスを指定して、そこにあるファイル名を全て取得し、
そのファイル名を配列に落としたいのですが。
(ファイル名の取得まではできています。)
どうやったら良いのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (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で配列の要素数増やすのはあまり好ましい方法ではありませんが、参考になれば

参考URL:http://www.microsoft.com/japan/developer/scripti …
    • good
    • 0
この回答へのお礼

続けてご回答ありがとうございます。
>> 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です…。

お礼日時:2002/01/24 09:20

>Instrの代わりにMidとかLeftとかでもできますよね!


>(ファイル名に規則があれば。)

もちろん可能です。
「abcから始まる、拡張子 pngのファイル名を抽出」ってのもご想像の通りの方法で可能です。

>昨日、結局VBScriptのリファレンス買っちゃいました。
>こういうところは、ASPの中にVBScriptを記述していることになるんですよね?
>いまいち、ASPとVBScriptの区別が良く分かっていないadrieです…。

そう理解して間違いないと思います。

ASPってのはプログラミング言語ではなく、そういう仕組みの名称ですね。
で、実際の開発言語としてVBScript, JScriptなどを使用するようになっています。

CGIも同じですよね
CGIもあくまで仕組みの名前であって、開発言語としてはPerlやC言語などが使われていますよね。

・・・余計混乱させてしまったらすいません。

この回答への補足

書いていただいたスクリプトを参考にして、やりたいことができました。
ありがとうございました!
またよろしくお願いします。

補足日時:2002/01/24 11:50
    • good
    • 0
この回答へのお礼

> ・・・余計混乱させてしまったらすいません。
大丈夫です。私もそのように理解していますので。
ただ、書籍を色々読んでいると混乱してきますね。
(ASPを言語のように解説している本もあるし、前出のInstrなどの
関数がASPの関数のように書いている本も結構ありますよね?)

ASPの組み込みオブジェクトとVBScriptの組み込みが違うのは
理解しやすいのですが、関数などはどちらの持っている機能なのかが
分かりづらいです。
昨日からやっているファイルオブジェクトに関するGetFolderなどは
ASPのリファレンスにもVBScriptのリファレンスにも載っていました。
(ASPのリファレンスには、上記Instrなどの関数は載っていないので、
純粋にASPで持っている機能のみを書いてあるんだな、と信用しているのですが。)

でもまぁ、基本的にはASPという環境(仕組み)の中でVBScriptを使って
スクリプトを書いている、という認識で良いということですよね。
ありがとうございました。

お礼日時:2002/01/24 11:11

サンプル作っている間に先越されちゃいました(笑)


せっかく作ったの一応

<%@ 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は必要なくなるような気がするのですが、ダメなのでしょうか?

ちなみに私はこの後更に、今作ったファイル名の配列から特定の文字列を含んだ
ファイル名のみを抜き出して別の配列を作りたいのです。
難しいでしょうか?

補足日時:2002/01/23 21:28
    • good
    • 0

ASPという事はサーバサイドのVBScriptで書かれていると思いますが



Dem  配列名()
で宣言しておき

ReDim Preserve 配列名(配列の大きさ)
で配列の大きさを変える(Preserveを指定すると配列の中身を初期化しない)

詳しくは参考URLにて確認願います。

参考URL:http://asia.microsoft.com/japan/developer/script …

この回答への補足

回答ありがとうございます。
上記のお答えは分かるのですが、どこを調べても動的配列にはReDimと書いて
ありますよね。
そこも私は疑問なのですが、今回のような場合、

dim 配列名a
配列名a=Array(filesコレクション名.Count)
としたら、redimは必要なくなるような気がするのですが、ダメなのでしょうか?

補足日時:2002/01/23 21:23
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASPで画面間のパラメタ受け渡し

こんばんは。ASP初心者です。
ASPでWEBページの作成を行っています。画面遷移をResponse.Redirect()で行っているのですが、遷移前のページと遷移後のページでパラメタを受け渡したい場合はSession("hoge") = "hogehoge"のようにセッションに入れる以外、何か方法はないでしょうか。リクエスト間でパラメタ渡せればがいいので、セッションを通じて保持しておく必要がないのです。クエリを使用するとアドレス欄に変数の値が見えてしまうのでできれば使いたくありません。

Aベストアンサー

1. Cookieを使う
2. 画面遷移を postで行い、hidden項目に値をセットする (要JavaScript)

私は面倒なのでセッション変数使ってますが、必要なくなればセッションをクリアすれば良いだけだと思います。

Session.Contents("hoge") = Empty

QASP(VBS) ←→ JavaScript の変数値のやりとり

どうかよろしくおねがいします。m(__)m
VBScript とJava を使ったデーターベースを作成していますが、VBScript で取得した変数値を Java で使用するには ( またその逆も )どうしたらいいのでしょうか。

Aベストアンサー

確信は持てませんが、
JavaScriptの1行目
「if ( i == 1 ) { 」を、
「if ( <% = i %> == 1 ) { 」
にしてもダメでしょうか?

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Q配列の受け渡しについて

初めて投稿します。
手詰まりになってしまい、お知恵を拝借できればと思います。

Dim Cnt
Dim A()
Dim c

Cnt = カウント件数(Select文でのカウント件数)
ReDim A(Cnt)

c = 0

DO UNTIL SQLrs.EOF

A(c) = SQLrs.Fields("フィールド名")
c = c + 1

LOOP

としてAの配列に格納しているのですが、これをASPの次のページに渡したいのですが、うまくわたせません。

<input type="hidden" name="aaa"value="<%= A %>">

として

次のページで

aaa = Request.Form("aaa")

で配列の値まではは取得できないのでしょうか?

どうかよろしくお願いいたします。

Aベストアンサー

そういったことをしたいのであれば 送信ボタンのonclickイベントで細工することになりそうですよ

出力されているHTMLが
<input type="checkbox" name="ck">
といった具合なら

<input type="submit" onclick="mySubmit()">
<script type="vbscript">
Function mySubmit()
  dim ck
  for each ck in document.getbyElementsByName("ck")
    if not ck.checked then
      ck.checked = true
      ck.value="off"
    end if
  next
  mySubmit = true
End Function
</scriopt>
といった具合です

#ただし 一瞬チェックボックスにすべてチェックがつくのが見えてしまいます

QASPからJavaScriptへの受け渡し方法は?

ASPを利用し、WEB-APを作っている初心者です。サーバサイドのスクリプトはVBScriptを使っているのですが、クライアントブラウザの制御に関する部分は、職場のブラウザ環境がNetscapeCommunicator4.7なので、JaveScriptを使わざるを得ません。
私、JaveScriptが苦手で良く分からないのですが、サーバサイドでADO経由でDBから取得した値を、クライアントサイドで実行されるJaveScriptのコードの中に埋め込む方法はあるのでしょうか?

具体的には、次のコード中、
01 <SCRIPT LANGUAGE="JavaScript">
02 <!--
03 myMsg = "あああああ";
04 myMsg = myMsg + myMsg;
05 myCnt = 0;
06 myChar = "1";
07 myApp = myChar.length;
08 function myFunc(){
09 document.notice.noticeMes.value = myMsg.substring( myCnt , myMsg.length );
10 myCnt = ( myCnt == (myMsg.length/2)-myApp ) ? 0 : myCnt+myApp;
11 setTimeout( "myFunc()" , 200 );
}
// -->
</SCRIPT>
03行目のmyMsgという変数にサーバサイドで実行するVBScriptのコードから
動的に値を受け渡したいのです。
よろしくお願いします。

ASPを利用し、WEB-APを作っている初心者です。サーバサイドのスクリプトはVBScriptを使っているのですが、クライアントブラウザの制御に関する部分は、職場のブラウザ環境がNetscapeCommunicator4.7なので、JaveScriptを使わざるを得ません。
私、JaveScriptが苦手で良く分からないのですが、サーバサイドでADO経由でDBから取得した値を、クライアントサイドで実行されるJaveScriptのコードの中に埋め込む方法はあるのでしょうか?

具体的には、次のコード中、
01 <SCRIPT LANGUAGE="JavaScript">
02 <!--...続きを読む

Aベストアンサー

~~サーバサイド~~
Dim myStr

myStr = MyRS.Fileds("フィールド名")
~~ここまで~~

~~略~~
03 myMsg = "<% = myStr %>";
~~略~~

こんな感じでしょうか。

QASPの変数の値をJAVA Script内で使用したいのですが

vfunction ShainSet(){
parent.frmMain.location.href="./Nipo_Calendar.asp?dbID=<ココ>&tNow=<ココ>";

}
//-->
--------------
上記のようなJAVA Script内でaspファイルの引数として指定している、dbIDとtNowという変数に対して、
同じASPファイル内(下の方に続いている部分)で取得する値を代入したいのですが、ASPの変数の値をどのようか形でJAVAで記述すればいいかわかりません。
--------------

Set cn = Server.Createobject("ADODB.Connection")

ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db\nipo.mdb"
Call cn.Open(ConnectionString)

MySql="SELECT T_社員マスター.社員ID,T_社員マスター.氏名,T_社員マスター.現場ID " _
& "FROM T_社員マスター " _
& "WHERE T_社員マスター.現場ID= '" & sel & "'" _
& "ORDER BY T_社員マスター.社員ID ;"

Set rs = cn.Execute(MySql)

Do While Not rs.EOF

Response.Write "<Option Name=Shain Value=""" & rs("社員ID") & """>" & rs("社員ID") & ":" & rs("氏名")

rs.MoveNext
Loop

tNow = Now()
dbID = rs("社員ID")
%>
<FORM>
<INPUT type="button" value="選択" onClick="ShainSet()">
</FORM>

----------

<%=変数名%>などのように、JAVAの内部に<%%>でくくったASPの変数を使用してもうまく動かないのですが、
何か別の表記方法があるのでしょうか?

<ココ>かかれた場所に、ASP内で使用している変数を使いたいのですが。。。

vfunction ShainSet(){
parent.frmMain.location.href="./Nipo_Calendar.asp?dbID=<ココ>&tNow=<ココ>";

}
//-->
--------------
上記のようなJAVA Script内でaspファイルの引数として指定している、dbIDとtNowという変数に対して、
同じASPファイル内(下の方に続いている部分)で取得する値を代入したいのですが、ASPの変数の値をどのようか形でJAVAで記述すればいいかわかりません。
--------------

Set cn = Server.Createobject("ADODB.Connection")

ConnectionString = "Provider=Microsoft....続きを読む

Aベストアンサー

ASP側で受け取るときですね。

URLに対してMethod="GET"のhttpリクエストだったら

ASP側で
request.queryString("dbID")
request.queryString("tNow")
Stringとして取れます。

ちなみにmethod="POST"だったら

request.From("dbID")
request.From("tNow")

ですね。

JavaScript側は文字列をそのままセットしちゃってください。可変にするのだったら以下のようにそのページ内で変数を作って+で連結すればOKです。

parent.frmMain.location.href="./Nipo_Calendar.asp?dbID=" + strdbID + "&tNow=" + strtNow ;

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Q同じIDで定義した要素の配列を取得したいが

お世話になります。

ドキュメントで、IDに同じ名前を振付けることで
配列になっている要素を取得する方法を教えたください。

例)
<div id="sec1">あああああ</div>
<div id="sec1">いいいいい</div>
<div id="sec1">ううううう</div>
<div id="sec1">えええええ</div>

上記のようなケースだと、「sec1」が配列となって、
定義されますが、実際に取得して使う場合です。

getElementById("sec1")だとnullになりますが、
getElementById("sec1[0]")だと一つずつは取得できます。

これをまとめて配列として取得する方法をお願いいたします。

初心者ですみません。

Aベストアンサー

まず前提としてidは同一ページ内で一意だよ。

だから例に示すケースはあっちゃだめ。

やるとしたらclass="sec1"にして
document.getElementByClassName('sec1');

で取得するべき。
これなら配列で取れる。

Q隠しフィールドをVBScriptでの受取る方法

初めての投稿です。
ぜひ、おしえてください。

隠しフィールドのデータを次のページ(VBScript)での受取り方法がお聞きします。

default.aspファイルに下記を記述しています:
<FORM NAME="MyForm" method=Post Action="./sub.asp">
<INPUT TYPE=Hidden VALUE="<% Response.Write MyData %>" Name="MyData">
<INPUT type="submit" name="cmdSend" value="送る">
</Form>

sub.aspファイル(次ページ)に下記を記述しています:
<SCRIPT LANGUAGE="VBScript">
Dim temp
temp = MyForm.MyData.Value
</SCRIPT>

上記の記述文では、データの引渡しができませんが、
(sub.aspページでMyFormがエラーになります)
どなたか、正しい書き方を教えてもらえませんか?

すみませんが、よろしくお願いいたします。

初めての投稿です。
ぜひ、おしえてください。

隠しフィールドのデータを次のページ(VBScript)での受取り方法がお聞きします。

default.aspファイルに下記を記述しています:
<FORM NAME="MyForm" method=Post Action="./sub.asp">
<INPUT TYPE=Hidden VALUE="<% Response.Write MyData %>" Name="MyData">
<INPUT type="submit" name="cmdSend" value="送る">
</Form>

sub.aspファイル(次ページ)に下記を記述しています:
<SCRIPT LANGUAGE="VBScript">
Dim temp
temp = MyForm.MyData.Value
<...続きを読む

Aベストアンサー

> <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
> </SCRIPT> の間で受取ったデータを
> <SCRIPT LANGUAGE="VBScript">
> </SCRIPT> の処理の間に渡したいんですが、
> できますでしょうか。

サーバーサイドとクライアントサイドの処理の違いを理解していれば簡単な話ですが・・・

<SCRIPT LANGUAGE="VBScript">
Dim temp
temp = <%= Request.Form("MyData")%>
</SCRIPT>


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報