ファイル名を変数として読み込みたい(行列言語)

このQ&Aのポイント
  • 行列言語でファイル名を変数にして読み込む方法を教えてください。
  • 200個のcsvファイルを繰り返し読み込む方法を教えてください。
  • 行列言語のloadmatを使ってファイル名を変数として扱う方法を教えてください。
回答を見る
  • ベストアンサー

ファイル名を変数として読み込みたい(行列言語)

はじめまして。プログラミングの初心者です。 今、「ox」という行列言語を使ってプログラムを書いています。 csvファイルからデータを読み込み処理させたいのですが、ファイル数が200程あり、一つ一つファイル名を書くのはとても面倒です。 なので、ファイル名を変数にして、繰り返しファイルを読み込めば早いかと思いましたが、やり方がわかりませんでした。。 読み込むコマンドはloadmatを使い、下記の様にすると、読み込めました。(ファイル名が000.csvの場合 ) mx = loadmat("/Users/home/Desktop/000.csv"); ここでファイル名を 001.csv 002.csv 003.csv ・・・・200.csvとして、iを変数とし、命令を mx = loadmat("/Users/home/Desktop/i.csv"); のようにして、for()やwhileの命令で繰り返しファイルを読み込みたいのですが、ここから先に進めません。 どなたか、良い解決案をご存知の方がおられましたら、ご教授下さい。よろしくお願いします。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

読み込ませたいcsvファイルを列挙したファイル(ex. matfiles.txt)を作成して、そいつを1行ずつfscan()してファイル名とするとか。こんな感じでしょうか: decl fp, fname; fp = fopen( "matfiles.txt" ); while ( fscan( fp, "%s", &fname ) > 0 ){ mx = loadmat( fname );... } fclose( fp ); 試さないで書いてるので外してるかも。

参考URL:
http://www.doornik.com/ox/index.html?content=/ox/oxstdexamples.html#fscan
asianmusic
質問者

お礼

さっそく教えていただいて、ありがとうございます。 しかし、fscanのコマンドで、英文字を読み込む事ができませんでした。 (matfiles.txtの中身を 0.csv 1.csv のようにした時、読み込まれるのは 0 1 の数字のみでした。) 引き続き何かアドバイスをいただきたいです。よろしくお願いします。

asianmusic
質問者

補足

すみません、お礼の内容を間違えました。 fscanではなくfopenでした。 fopenでテキストファイルを読み込む時、数字しか読み込まれず、文字は読み込まれませんでした。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> fopenでテキストファイルを読み込む fopen()では読み込むための準備をするだけで、中身を読み込まないです。fpに数字が入っているんだとしたら、それはOx内部で使用する特別な値(ファイルディスクリプタとか。)と思われます。 fscan()で変数fnameに文字列が入ってないのだとしたら、書式文字列が違っているか、読み込むファイルの改行コードとかが違っているとか。 例示コードに誤りは特にないと思うんだけど。Windows版で試してみたら動いたので。 ダメなら、loadmat命令を列挙するシェルスクリプトを書いて、その結果ファイルを#includeするとか。

asianmusic
質問者

お礼

すみません、printの位置を間違えてました。。 教えて頂いた様にしたら、ちゃんとできました。 時間がなかったもので、本当に助かりました。 ありがとうございました。

関連するQ&A

  • ファイル名を変数で書きこむfwriteの仕方

    fopen( "   ", "w" ); 上記の関数によって書きこむファイル名を変数で設定するにはどうすれば良いですか? 例えばiとjと言う変数があった場合、i_j.csvをファイル名としたいです。(iとjを変数とします。) ご存知の方がいましたら、教えてください。

  • VBA:テキストファイルのパスを、変数に置き換え

    エクセルに、CSVファイルを取り込むため、マクロ記録をしました。↓ With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Users\hatena\Desktop\新しいフォルダ\ID\21008689.CSV", Destination:=Range("$A$1")) .Name = "21008689_4" .FieldNames = True .RowNumbers = False 以下省略 End With そこで、コード2行目の「"TEXT;C:\Users\hatena\Desktop\新しいフォルダ\ID\21008689.CSV",」 の部分を、変数に記録されたパスに置き換えたいのですが、どうすればよいでしょうか? 変数に「C:\Users\hatena\Desktop\新しいフォルダ\ID\21008689.CSV」を代入して 「TEXT;」の後に変数名を記述しても、色々試しましたがどうもうまくいきません。 そもそも、このようなことはできないのでしょうか? 有識者の方々、どうぞよろしくご教授お願いいたします。

  • バッチファイルにおける環境変数分の繰り返し処理

    こんにちは。 現在、CSVから読み込んだ値(ファイル名)を環境変数に格納し、その環境変数に合致したファイルの移動を行う。というバッチファイルを作成しています。 作成にあたってCSVからのファイル名の読み込み及び、環境変数に全てのファイル名を1個ずつ格納する事(a1=AAやa2=BBなど)には成功したのですが、その後のファイルを移動するコマンドが上手く書けません。 ちなみに move "*%a1%*.txt" "C:\" move "*%a2%*.txt" "C:\" 上記のように1個ずつ手動で環境変数を指定しての移動は出来るのですが、その日によって 取得するファイル名(環境変数の数)が異なってくる為、可能であれば自動で環境変数の数を取得し環境変数分、1個ずつ環境変数からファイル名を読み込み、そのファイルを移動させる。と言ったバッチを組みたいのです。 よろしくお願い致します。 ------------------------------------------------------------------ set count=1 for /f %%i in (test.csv) do @call :add %%i goto PROCESS1 :add set a%count%=%1 set /A count+=1 goto :EOF :PROCESS1 ※移動するコマンド ------------------------------------------------------------------

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • Powershellで複数のcsvファイルを一つに

    powershellの初心者です。 PowerShellで複数のcsvファイルを一つにする必要にせまり ネット情報を探して以下がヒットしましたが 初心者なのこの情報をどう利用して良いのかが判りません。 以下の具体例でコード(Join.ps1)を教えてください。 以下の3つのファイルを C:\Users\TAC_\Desktop\Test\Drive1.csv C:\Users\TAC_\Desktop\Test\Drive2.csv C:\Users\TAC_\Desktop\Test\Drive3.csv 以下のファイル名に保存(まとめる) C:\Users\TAC_\Desktop\Test\Join.csv C:\Users\TAC_\Desktop\Test\Join.ps1を起動させると 該当する3つのCSVファイルを結合したJoin.csvを作成する

  • Rubyでの行列式の計算について

    Rubyでcsvファイルから行列の値を読み込んで、 行列式の乗算をしたいのですがエラーがでて困っています。 例えばA.csvがcsvファイルの形式で100行20列の行列でB.csvもcsvファイルの形式で20行3列の行列としたとき、 require 'matrix' require 'csv' ma = CSV.read(A) mb = CSV.read(B) mc = ma * mb print mc, "\n" と入力すると、":in `*': can't convert Array into Integer (TypeError)" というエラーが出てしまいます。 プログラミング初心者なので根本的なところが理解できていないかも知れませんが、解決法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • FTPコマンドで複数ファイルをアップロードする

    どうか、お力をお貸しください。 テキストファイルに命令文を書いて、それをFTPコマンドで実行しています。 以下、テキストに書いたものです。 これは1ファイル用ですが、これを実行するとhogeというディレクトリに『123.csv』がアップロードされます。 open IPアドレス ユーザー名 パスワード put C:/123.csv /hoge/123.csv close quit 私がやりたいのは、指定のディレクトリ内の全てのファイルを転送することです。 複数ファイルの転送は、mputコマンドを使う、ワイルドカードで同一拡張子のファイルを全て転送できる、確認のプロンプトを出さない仕掛けが必要 ・・らしいことは分かったのですが、上手くいきません。 以下のように書いてはみましたが、失敗しました。 ftp -i open IPアドレス ユーザー名 パスワード mput C:/*.csv /hoge/*.csv close quit mput以下、どのように記述すればよいのでしょうか? くだらない質問かもしれません、申し訳ありません。 どうかお力をお貸しください、宜しくお願い致します!

  • 変数名の使用について

    初心者です。 loadMovie();を使って外部JPGを読み込みし、 ファイル名に変数を使いたいのですが、うまくいきません。 とういか可能ですか? CSVデータより配列に格納し、配列を変数に入れてその名前でJPGにアクセスしたいです。 ↓これがうまく動いたので↓ getURL("http://www.▲▲▲.jp/"+hensu+".html"); ↓これもうまく動くと思ったら動かない・・・↓ MC.loadMovie(hensu+".jpg"); よろしくお願いします。

    • ベストアンサー
    • Flash
  • 動的な変数名のつけ方について

    ■環境 OS:XP 言語:C++ コンパイラ:Visual C++ 2008 char*やstd::string等で格納された文字列を使用して 変数を宣言することは可能でしょうか。 用途として、テキストファイル等から文字列を取得し その文字列を変数名としてプログラミング内で使用するという方法を考えています。 よろしくお願い致します。

  • CSVファイルを読み込み、ファイル名を変更。

    CSVファイルを読み込み、ファイル名を変更。 使用言語はperlです。perlは初心者です。 アルゴリズムが、 CSVファイルを読み込み→2次元配列に格納→ファイル名変更 という流れになっているプログラムを作成中です。 CSVファイルの中身は あ.txt , a.txt い.txt , b.txt う.txt , c.txt です。 CSVファイルを読み込み2次元配列に格納するプログラムは以下のようにしました。 ----------------------------------- $i= 0; open IN, "sample.csv"; while (<IN>) { my @data = (); @data = split (/,/); for (0..@data) {$jdata[$i][$_] = "$data[$_]";} $i++; } close IN; ---------------------------------------- 「あ.txt」を「a.txt」に変更しようとして、この中に rename $jdata[0][0] , $jdata[0][1] ; と書いてみましたが、変換されません。 どう書けばよいのでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう