ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 16:08

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月21日(木) 21:36 
はじめまして。ActiveBasicを初めてまだ間もない者です。

簡単なプログラムをいろいろ試してみることから始めてみようと思い、
今はフォルダを指定するとその中のファイル名を表示するというプログラムに挑戦しています。

ファイルの名前を取得し、それをひとつひとつ変数に入れたいのですが、
フォルダの中にファイルがいくつ入っているかわからないので、
変数の定義のしようがありません。どのようにすればいいのか見当もつかず困っています。

なにかよい方法があればアドバイスよろしくお願いします。


通報する
ページトップ
   
投稿記事Posted: 2005年7月21日(木) 21:48 
オフライン

登録日時: 2005年7月03日(日) 10:37
記事: 27
お住まい: 愛知県岡崎市
> ファイルの名前を取得し、それをひとつひとつ変数に入れたいのですが、
> フォルダの中にファイルがいくつ入っているかわからないので、
> 変数の定義のしようがありません。どのようにすればいいのか見当もつかず困っています。
フォルダの中のファイル名を取得する方法(Find*File)は分かりますか?
そしたら、事前に実行しておき、
カウンタ変数を使って数を数える事になります。

でも、仮にこれで分かったとしても、
配列変数の[]内では変数や式、関数の戻り値などは使えません。
どうしてもやるのであれば、予め想定値を見つけておき、
それを上回る量の配列を仕込むべきでしょう。

ちなみにこの実現方法として、
ファイル名のリストを別の内部ファイルに一旦吐き出してしまう方法もあります。
この場合、内部ファイルに吐き出す時点で数が判明するので、
後は好きなように料理できると思います。
※パス名にはカンマ(,)やNull文字(\0)が使われませんので、
 Input命令で確実に1行を取り出せてしまうのもこの方法の利点です

_________________
# まけイヌ (losedog2)
# Home : http://www50.tok2.com/home/losedog2/
# Mail : losedog2@yahoo.co.jp


通報する
ページトップ
投稿記事Posted: 2005年7月21日(木) 21:49 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
>ファイルの名前を取得し、それをひとつひとつ変数に入れたいのですが、
>フォルダの中にファイルがいくつ入っているかわからないので、
>変数の定義のしようがありません。どのようにすればいいのか見当もつかず困っています。

少し難しいですが、大体の流れを書いておきます。
実際にファイル名を列挙するにはFindFirstFile関数などを使いますが、その辺のコードは省略します。

<ファイルの名前を列挙する前に、ファイル数がわかる場合>
コード:
Dim NameList As **Char
Dim i As Long

'使い始め
NameList=malloc(SizeOf(*Char)*10) '←「10」の部分をファイル数に変えてください
NameList[0]=malloc(25) '←格納したいファイルの名前+1バイトを指定してください。サイズは少し多めにしておいてもかまいません
lstrcpy(NameList[0],"filename.txt") '←ファイル名を指定してください
NameList[1]=malloc(20)
lstrcpy(NameList[1],"filename2.txt")

/*以後略*/

'使い終わり
For i=0 To 9 '←ファイル数-1を指定してください
    free(NameList)
Next
free(NameList)


<列挙してみるまでファイル数が確定しない場合>
コード:
Dim NameList As **Char
Dim FileCount As Long
Dim i As Long

'使い始め[ここから~ここまで を必要回数呼び出してください(ファイル列挙のDo~Loop内で呼び出してもよいでしょう)]
'==ここから==
If FileCount Then
    NameList=realloc(NameList,SizeOf(*Char)*(FileCount+1))
Else
    NameList=malloc(SizeOf(*Char))
End If
NameList[FileCount]=malloc(25) '←格納したいファイルの名前+1バイトを指定してください。サイズは少し多めにしておいてもかまいません
lstrcpy(NameList[FileCount],"filename.txt") '←ファイル名を指定してください
FileCount=FileCount+1
'==ここまで==

'使い終わり
For i=0 To FileCount-1
    free(NameList)
Next
free(NameList)

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
投稿記事Posted: 2005年7月21日(木) 22:30 
配列というもの(?)をまったく知らず、勉強不足を痛感しました。
これから一つ一つ読み解いていくつもりです。
まけイヌさん、hiraさん丁寧な回答本当にありがとうございました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[9人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean