• ベストアンサー

ファイル読み込みについて

おはようございます。 行き詰ったので質問させてください。 指定したリストBOXの項目(いくつかは分からない)にあるtxtファイルの内容を配列に順に入れたいのですが、方法が分かりません。 やりたい事は・・・ ・リストBOXに入っているファイル名はすべてtxtで昇順に並んでいるので、それらの中身をつなげたいです。 ・たとえば、1.txt(あいうえお) 2.txt(かきくけこ) 3.txt(さしすせそ)となっていたら、それらの内容を配列の0.1.2に入れたあとに、配列の中身を順番にくっつければ「あいうえおかきくけこさしすせそ)。 となるようにしたいです。 txtファイルの中身は文章のように長かったりすることもあります。 私はこの方法しか思いつかなかったのですが、実装方法が分からないので教えていただきたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • R_Moon
  • ベストアンサー率60% (9/15)
回答No.4

たびたびすみません。#1で回答した者です。 エラーが起きてしまった件すみません。 配列の数をリストBOXのアイテム数にする為 可変で宣言しようとしたのですがうまくいかないようですね^^; Dim strData() as String ReDim strData(0 To ListBox.ListCount - 1) でどうでしょうか? これでだめなら、 Dim strData(0 to 100) as String とか定数の指定なら行けると思います^^; 後、補足ですが各テキストファイルには1行のみのデータが入ってると仮定していますが もし複数行ある場合があるとしたら Line Input #1, strRecord の部分は strData(i) = "" Do Until EOF(1)  Line Input #1, strRecord  strData(i) = strRecord Loop でまわす必要があります。 これもまた動かしてないので不具合があればごめんなさいm(__;)m

mari1215
質問者

お礼

こちらこそたびたびすみません。 色々ためしたのですが、 strData = "" の部分で配列には割り当てられません。 とエラーが出てしまいます。 さすがにこれ以上は迷惑なので一度しめて悩み返してみます^^; 色々な回答わざわざありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • R_Moon
  • ベストアンサー率60% (9/15)
回答No.3

mari1215 さん、こんにちは。 #1で回答した者です。 Dim strDirName As String Dim strRecord As String Dim i as Integer Dim strData(0 To ListBox.ListCount - 1) as String strDirName = XXX '←フォルダのパスを設定 strData = "" For i = 0 To ListBox.ListCount - 1  Open strDirName & ListBox.List(i) For Input As #1  Line Input #1, strRecord  strData(i) = strRecord  Close #1 Next i 実際には動かしてませんが、こんな感じでしょうか。

mari1215
質問者

お礼

返信ありがとうございます。 動かしてみたのですが、 Dim strData(0 To ListBox.ListCount - 1) as String のListCountの部分でエラーが起きて、「定数式が必要です」。とでてしまいます。 0~項目数-1ですべての項目を取得しているという事は理解できたのですが、エラー内容はよくわからないです。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

問題の意味(焦点)がはっきり掴めなかった。 そこで拙いものですが、コーディング例を上げます。 どの辺が、実情と違うか、疑問か補足して見て下さい。 Private Sub Form_Click() Dim s(100) Open "c:\My Documents\aa5.txt" For Input As #1 Open "c:\My Documents\aa6.txt" For Input As #2 Open "c:\My Documents\aa7.txt" For Input As #3 st = "" j = 1 While Not EOF(1) Input #1, s(j) st = st & s(j) & vbCrLf j = j + 1 Wend Close #1 '----- While Not EOF(2) Input #2, s(j) st = st & s(j) & vbCrLf j = j + 1 Wend Close #2 '------- While Not EOF(3) Input #3, s(j) st = st & s(j) & vbCrLf j = j + 1 Wend Close #3 '------ MsgBox st Form1.List1.Clear '---- For i = 1 To j - 1 Form1.List1.AddItem s(i) Next i End Sub (Documents\aa5.txtの中身) 永らくご無沙汰しています。 その後お元気ですか。 (Documents\aa6.txtの中身) 田植えも無時終わりましたか。 庭のアジサイの花は咲いていますか。 お父さんも謡のお稽古に行ってますか。 (Documents\aa7.txtの中身) 来月には久しぶりに帰ります。 それまでお元気で。 (Msgboxの中身)及び(ListBoxの中身) 永らくご無沙汰しています。 その後お元気ですか。 田植えも無時終わりましたか。 庭のアジサイの花は咲いていますか。 お父さんも謡のお稽古に行ってますか。 来月には久しぶりに帰ります。 それまでお元気で。 ファイル数が増えた場合に繰り返しにもっていこうとしたが、ファイルナンバーで引っかかった。取りあえず 。

mari1215
質問者

お礼

わかりやすい説明ありがとうございます。 でも、なんか想像と違うような・・・。 リストBOXにはフォルダ参照ダイアログで指定したフォルダの中身のtxtファイルだけを昇順に並べたものが入っています。 それを単純に上からファイルの中身を結合していく。って感じです。 しばらく悩んでみます・・

全文を見る
すると、全ての回答が全文表示されます。
  • R_Moon
  • ベストアンサー率60% (9/15)
回答No.1

mari1215さん、こんにちわ。 目的がいまいちわかりづらいのですが リストBOXの項目をループで順読みして 該当するファイル名からそのファイルを OPENステートメントで開いて内容を読みとって 配列に格納するという手順でしょうか。 For i = 0 To ListBox.ListCount - 1 If ListBox.Selected(i) = True Then 'ListBox.List(i)を参照する 'Open ステートメントで参照したファイルを開く '内容を配列に格納する End If Next i 配列の数は予め宣言しても良いし、ReDimで増やして いっても良いと思います。 的外れな回答かもしれませんが参考にして下さい。

mari1215
質問者

お礼

目的を#2さんの所に書きましたが、まだ分かりずらいですよね?説明するのが難しいなぁ・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vb2010でテキストファイルの1行置きの読み込み

    VB2010です。 フォームにリストボックスとコマンドボタンがあります。 コマンドボタンをおしたら”C:\test.txt”の内容を2行目から一行おきにリストボックスに 表示させたいのですが、どのようなコードを書いたらよいのでしょうか? test.txt内容 aaa あいうえお 123 かきくけこ 456 さしすせそ 789 リストボックスには あいうえお かきくけこ さしすせそ と表示させたいです。

  • C#)コンボボックスの内容を上から格納するには

    おはようございます。 C#の質問はここでいいのでしょうか? コンボボックスにあるフォルダの内容を参照し表示して昇順で並べたのですが、このあとこのコンボボックスの内容を1番目から最後まで配列に格納したいのですが方法が分からないので教えていただけると助かります。 実際にやりたいことはこのコンボボックスに入ってるファイル名のファイルの内容を、上から順番に表示したり連結してみたいのです。 どうぞよろしくお願いします。

  • vbsでtxtファイルを1行ずつ読み取って

    vbsでtxtファイルを1行ずつ読み取って 配列に格納し、メッセージボックスで表示したいです。 サンプルソースや参考サイトを教えてください。 txtファイルの中身のイメージは↓のような感じです。 shinagawa yokohama ・・・ ・・・ 大体50行位です。 配列でなければなりません。 よろしくお願いします。

  • ファイルの読み込みと置き換え

    Perlでテキストファイルを読み込み、テキストの一部を置き換えをするというプログラムを作っています。 用意されているテキストファイルは複数行あるもので、リスト作成ツールのフリーソフトにより作成されています。 目的はファイルを読み込み、一行一行中を見て特定の文字を置き換えて、最後に配列に一行一行いれていくというものです。 逆に配列に一度いれて一個一個置き換えてもOKで、結果が同じならばOKです。 以下にそのプログラムを書きます。 ############################## open(IN,"list.txt") || die "ファイルが見つからないので終了します。"; @file = <IN>; $count=@file; while(<IN>){ $_=~s/xls/エクセルファイル/; print "置き換え中!残りあと$count行です\n"; $count-- } close(IN); print"@file[18]","\n"; ############################## 最後の行で置き換えが成功したか見てますが、これを実行しても何も表示されません。 もちろん行数は18行どころか100行くらいあります。 たぶん配列の入れるタイミングとか何かが間違っていると思うのですが、どこで間違っているのかがよくわかりません。 教えていただけると助かります。

    • ベストアンサー
    • Perl
  • テキストファイルへの書き込み方法について

    テキストファイルがある場合は、データを読んでリストボックスに表示をさせ、追加の場合はテキストボックスに入力した項目をテキストファイルの一番後ろの 入れる事は出来ましたか? また、テキストファイルのデータの並び方からを昇順で保存することは出来ますか? 文章が適切ではないかもしれませんがよろしくお願いします。

  • ファイルの読み込みとメモリ確保について。

    ファイルから文字を読み込んで それを配列に入れて辞書順にソートさせようとしています。 それで、ソート以前の問題なのですが、ファイルから文字列を読み込んで配列にいれようとするのですが、 buffを動的にメモリ確保してその配列に入れたいと考えているのですが、なぜか入ってくれません。 whileでファイルの終わりがくるまで一行ずつ読み込んで それをsに入れていき、sをbuff[]の配列に順番にいれていこうとしているのですが・・・。 ファイルは aaaa aabc dda wer zie ced sdfe be など適当な文字の並びです。 malloc関数で動的に確保したメモリはその後普通の配列と同様に使えるのではなかったのでしょうか? なので普通にbuff[i]=s;といった処理で入れれると思ったのですが。 ファイルは一行の長さの最大が100で 行数が4000行あると仮定しています。 今は小さいファイルでテストしていますが。 以下ソースです。 #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 #define MAX_LINE 4000 main() { FILE *fp; char *buff,s[MAX_SIZE]; int i; fp=fopen("words.txt","r"); buff=(char*)malloc(sizeof(char)*MAX_LINE); i=0; while(fgets(s,MAX_SIZE-1,fp)!=NULL){ buff[i]=s; printf("%s",buff[i]); i++; } fclose(fp); } とりあえずファイルの内容を配列に入れないとソートできないので、配列に全て入れてしまいたいと考えています。 間違いがどこにあるのか指摘よろしくおねがいします。m(-_-)m

  • ファイル名での読み込み

    eclipseを使ってコードを書いているのですが、ファイルを読み込む時に指定されたファイルがありませんとエラー表示されます。 パスで指定した場合はうまくいくのですが、ファイル名だけで読み込めるようにしたいです。考えられる解決策はありますでしょうか?読み込むファイル自体はプログラムと同じpackageの中に保存しています。 ファイルを読み込む、そのファイルの内容を他のファイルに書き込むというプログラムです。どちらもtxtファイルです。

  • Cで二次元配列の読み込み

    はじめまして。 hiraです。 今非常に基本的であろうことに悩んでいます。まだまだプログラムを始めたところなのでうまくいきません。 内容は・・・ あるファイルを読み込んで、二次元の配列に格納していく。 です。 具体的には test.txtというファイルがあり、中身は数字の二次元配列です。 カンマやtabで区切られています。配列の大きさ、数字の桁数などはファイルによって違います。 そのファイルを読み込んで、配列に格納したいと考えています。 今は一列を読み込むことには成功しています。そこからどのようにして分けて言ったらいいのか・・・ご教示お願いします。 もしくは、もっと違う方法で読み込む方法があればよろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fin; char array[256]; char buf[256]; fin=fopen("test.txt","r"); if(fin == NULL){ printf("%sがオープンできません\n",fin); exit(1); } while(fgets(buf,256,fin) != NULL) {           ここが問題・・・ } fclose(fin); return 0; }

  • ファイルからの入力方法について

    例えば、data.txt というファイルから数字を一つずつ変数に入力させたいです。 data.txtの内容は、 1 1 2 3 5 8 13 21 34 55 89 144 … のような並びで文字が書かれていて、それを int num[1000]; のような変数配列に数字として一つずつ順番に入力させたいです。 ご教授ください。

  • VBA フォルダ内のファイルを、ファイル名順に開く

    【PPT VBA】フォルダ内のファイルを、ファイル名順に開く方法について  今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Win7+PPT2007 になります。  下記のようなコードで、あるフォルダ内のファイル群のデータを取得しております。 「ファイル名順」でデータを取り出したいのですが、違う順(おそらく日時順)で 出てくるので悩んでいる次第でございます。  検索いたしておりますと、ハードディスク等の環境によって検出順が異なるようでございましたが 何か、良さそうな方法がございましたらお教えいただきたくお願いいたします。 Dim File_Collection As Object Dim File_List As Variant Dim Folder_Collection As Object Dim Folder_List As Variant Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(パス).Files For Each File_List In File_Collection      '(名前順では検出してくれません。。。) Next  暫く考えまして、例えば Stringの配列を用意しておいて一旦、上記コードでファイル名とパスをリスト化 →配列の文字列を登り順に、Sort →これの順にファイルを開いていく などという事を思いつきました。しかしファイル数が多いため(100~500個でございます)、 これらの長いパスを配列に入れるというのも、メモリに負担がかかる(?)のかな などと考えている次第でございます。  他に、配列の代わりにエクセルを一旦開いて、そこでソート・・・・・とも考えましたが 友人達に使っていただく可能性があり、余りスマートな解決策ではなさそうですので それよりは上記の「配列でソート」を優先したい次第でございます。  コーディングで何か良い方法があれば良いのでございますが、 他の方法でも結構でございます。もし「自分なら、こうするかな」といった ようなご意見などございましたら是非、ご紹介いただけないでしょうか。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。