初歩的なことなのでしょうが…。
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と関連する良く見られている質問

QCなどで要素の数が固定できない配列はどうやって実現しますか?

配列について質問します。

BASIC系では配列は動的配列で要素の数が自由に変えられます。
ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。
もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか?
どのように実現するのでしょうか?
配列と同じ使い勝手なら配列でなくともかまいません。

今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。

よろしくお願いいたします。

Aベストアンサー

malloc等のメモリ確保はNo.1さんの回答のリンクが詳しいですね。
C言語でプログラムを組む場合は、大抵はこれらメモリ操作関数のお世話になります。

これに加えて、C++やJavaのライブラリでは、動的配列クラスというものが使えます。
C++だとvectorやlist、JavaだとVectorやArrayListあたりですね。
他にも、言語や環境に依存したライブラリ、フレームワークで
様々な動的配列の機構が用意されていたりします。

簡単にまとめると、
・malloc、free、realloc等を使う方法 → ReDim
・動的配列クラス → Collection
のようなものだと考えてください。

Q実行中のASPファイル名(自ファイル)を取得する

お世話になります。

ASP内で現在実行中の自ファイル名称(パスでも可です)を取得したいと考えております。
VBでのMe.Nameみたいなことができるのかと思ったらできなくてちょっと困ってます。

ご存知の方いらっしゃいましたら何卒ご教授の程、よろしくお願いいたします。

一応環境情報も。。。
環境:IIS5.1 + ASP

Aベストアンサー

参考URLの方法で解決できます。

参考URL:http://gate.ruru.ne.jp/kakucha/asp/39.asp

QC#かJavaで、配列の中から別の配列を探し出す

お世話になります。

C#かJava(CやC++は入れない)で、特定の配列の中に、該当する
配列があるかどうかを調べるメソッドがあれば、教えてください。

例えば…

int[] a={0,0,0,1,2,3,4,5,6,7};
int[] b={3,4,5};

ならば、『5』が返ってくるなどです。

力技では、aの配列を順にみていき、bの一番目と同じなら、
お互いの配列の次の要素を比較…などとやっていくのですが、
これらの方法を、標準のメソッドがあれば…と思い、
質問させていただきました。

以上、よろしくお願いいたします。

Aベストアンサー

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の先頭の添字だけ欲しい場合
listA.indexOf(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の最後の添字だけ欲しい場合
listA.lastIndexOf(b[index]);

最初に見つかる添字だけ欲しいなら標準ライブラリで取得できますが、
全添字が欲しいとなると途端に泥臭くなります。

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオ...続きを読む

QASP(海外)サーバでMDBファイルのパスを設定するには?

brinksterというASPサーバを使用しています。
MS ACCESS Databaseもサポートしているのですが、
PWSのODBCマネージャに相当する部分がありません。
ASPファイルを実行すると、『プログラムで指定したMDBファイルが見つかりません』というエラーが出ます。

Database Managerというページが、あるにはあるのですが、ACCESS DB Passwordや、SQL Queryを書き込むように求められます。SQL Queryとは何ですか?何を書けばよいのでしょうか?

ちなみに、実行させたASPファイルは、私の自宅のPWSでは、問題無く動作するのですが…。

Aベストアンサー

Server.MapPath("hoge.mdb")
とすればServer上でhoge.mdbファイルが物理的にどこにあるかがわかりますよ。

参考URL:http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=ASP+Server+MapPath+MDB&lr=lang_ja

QC言語の2次元配列 容量が大きすぎる場合の対処方法

私はC言語をもちいて2次元配列を作ろうとしています。

しかし、配列数が double c[10000][10000];
と大きいものにすると、エラーになってしまいます。

もちろん小さい double c[10][10];
のような配列では問題ありません。

malloc関数とかも調べたのですがなかなかいい文献が見つからずに
困っています。
どうかいいご意見があればよろしくお願いします。

Aベストアンサー

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fread(&c, 1,8, fp);
 return c;
}

void write_c(FILE *fp, double *c, int x, int y) {
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fwrite(c, 1,8, fp);
}

int main(void)
{
 FILE *fp;
 double c,s;
 int x,y;
 int a[10000],b[10000];
 
 fp = fopen("c.dat","w+b");// double c[10000][10000]; の意味
 
 for(x=0; x<10000; x++) {
  for(y=0; y<10000; y++) {
   c=a[x]*b[y];
   write_c(fp, &c, x,y);// c[x][y]=a[x]*b[y]; の意味
  }
 }
 
 for(x=0; x<10000; x++) {
  s=0;
  for(y=0; y<10000; y++) {
   s += read_c(fp, x,y);// s += c[x][y]; の意味
  }
  b[x] = s / 10000;
 }
 
 fclose(fp);
 return 0;
}

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);...続きを読む

QASPでユーザのグループ名取得

ASP.NETではない(レガシー)ASPで、ログインユーザのグループ名を取得したいと考えています。
ユーザの管理は、webサーバのローカルユーザで管理しており、
ユーザ名は「Request.ServerVariables("LOGON_USER")」で取得することができましたが、
グループ名を取得する方法がわかりませんでした。
ServerVariablesにはグループ名を管理するパラメータは無さそうなのですが、取得することはできるのでしょうか?
まったく異なった方法でも良いので、ご存知の方がいらっしゃいましたら、ご教授願います。

Aベストアンサー

ASP で実行できるか試してません。

Dim domainName
Dim userName

domainName = "hoge"
userName = "taro_yamada"

Dim c
Set c = GetObject("WinNT://" & domainName & "/" & userName)

Dim g
For Each g In c.Groups
  Response.Write g.Name & "<br/>"
Next

Qc言語の配列の先頭アドレスが偶数アドレスとなる理由について

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
printf("%p\n",&nc);
printf("%p\n",&nd);


}

実行結果
0xbffff8cf
0xbffff8ce
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8b0 0xbffff8b1 0xbffff8b2 ← S配列
0xbffff8af
0xbffff8ae

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
pr...続きを読む

Aベストアンサー

メモリの配置はコンパイラとコンパイルオプションに依存します。
デフォルトだと、32ビットのメモリ処理単位=4バイトとか8バイトが多いかと。
理由は32ビットCPUが4バイト単位でメモリにアクセスするのでアクセス効率を優先したためです。

例えば、
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8ce 0xbffff8cf 0xbffff8d0 ← S配列
だとしたら、S配列の内容全てを参照するためにCPUは0xbffff8ccと0xbffff8d0の合計8バイトにアクセスする必要が出てきます。無駄ですよね。

QASP Session変数名の取得

ASP(VBScriptにて)現在使用されているセッション変数の一覧を変数名(Key)と共に取得したいです。
どのようにすればできますか?

Aベストアンサー

Dim Key
For Each Key in Session.Contents
Response.Write Key & "=" & Session.Contents(Key) & "<BR>"
Next

QC言語でunsigned char配列を連結する方法ってありますか?

C言語でunsigned char配列を連結する方法ってありますか?

例えば
unsigned char test[]={0x00,0x02,0x03};
unsigned char test2[]={0x05,0x06};
という配列があったとして

test[]という配列のあとにtest2の配列を追加することは可能でしょうか?
{0x00,0x02,0x03,0x05,0x06}という配列になればOKです。

よろしくお願いします。

Aベストアンサー

testの領域は3バイトのため、それ以上の配列を追加することは出来ません。
もし、testのサイズが5バイト以上あれば、test2を追加することは、できます。
その場合は、memcpy(&test[3],test2,2); とすれば、
testの4バイト目からあとに、test2の2バイトが追加されます。
新たに配列を作成して良いなら、
unsigned char test3[5];として
memcpy(test3,test,3);
memcpy(&test3[3],test2,2);
とすれば、test3はtestとtest2を連結したものとなります。

Q[ASP+SQLserver]列名の取得・・・

こんにちわ!皆さん!!
今日は、ASPで列名を取得する方法が見つからず悩んでします。

例えば
Syohin = rsSyohinMaster("商品名")
とすれば、テーブル内の「商品名」という列名に入っているデータをSyohinに格納できますよね?

そうではなくて・・・
Retsumei = rsSyohinMaster(1) とかやったら、
Retsumei に 「()」内で指定した番目にある列名を(例えば:商品名)格納
したいんです!

そういうコマンドないですか?

実際は指定されたテーブルの列名を配列に一気に取り込む処理を考えています。

いかがでしょうか?

宜しくお願い致します!

Aベストアンサー

Retsumei = rsSyohinMaster(1).name

の様に、参照中のアイテムに、「.name」をつければ、列名を取得できます。

ちなみに、
rsSyohinMaster.GetRows(count, start, fields)
関数で、配列に変換できます。
count:レコード数(-1で全て)
start:開始レコード位置(0現在位置から、1最初から、2最後のレコードから)
fields:フィールド名か、フィールド名の配列


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

人気Q&Aランキング

おすすめ情報