• ベストアンサー

MATLAB(マトラボ)とcsvファイルについて

マトラボで、文字列を含む、csvファイルを読み込み、データをプログラムに使用したいのですが、どうしたらいいですか? csvread('filename')ではできませんでした。 どなたか、ご教授くださいませ。

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

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

Excelで読み込んで、xlsファイルにセーブして、 xlsreadでmatlabに読み込むとか。 http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/xlsread.shtml

suzukiman0
質問者

お礼

この度は、ご丁寧にご回答を頂戴いたしまして、誠にありがとうございました!!!

その他の回答 (2)

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.3

#2です。 先ほどの手順(4)の部分で、読み込んだのが数値しかないと分かっている行に対してなら、 str = strrep(line, ',', ' ') data = sscanf(str, '%f') と書いた方がシンプルで良いかもしれませんね。

suzukiman0
質問者

お礼

何度もご回答をいただき、本当にありがとうございます。

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

(1)fid = fopen(path, 'r')でファイルを開く (2)line = fgets(fid)でファイルから1行取得 (3)index = findstr(line, ',')でカンマ位置を取得 (4)カンマ位置でlineを分割  文字列はそのまま取得、数値はstr2num()でキャストしてから取得  例)カンマがN-1個ある場合   data1 = line(1:(index(1) - 1))   data2 = line((index(1) + 1):(index(2) - 1))   data3 = line((index(2) + 1):(index(3) - 1))          :   dataN = line((index(N-1) + 1):end) (5)手順(2)~(4)をEOFまで繰り返す (6)fclose(fid)でファイルを閉じる このような手順で大丈夫だと思います。 ただし、ファイル構造が分かっていること、区切り文字以外でカンマが使用されていないことが条件です。 まぁ、構造が分からないファイルからデータを読み込むことなんてできませんが。

参考URL:
http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MATLAB5/jhelp/techdoc/refbycat/groups.html
suzukiman0
質問者

お礼

こちらからのご連絡が遅くなりまして、大変失礼いたしました。 今回は、ご丁寧なご回答、誠にありがとうございました。

関連するQ&A

  • 【再】MATLABのcsvreadについて

    前回質問させて頂いたのですが、意味が分からないとの指摘を 頂きましたので、再度質問させていただきます。 何度も申し訳ないですが、ご存知の方がいらっしゃいましたら教えて下さい。 私がやりたいのは、CSV形式のファイル名を入力すると MATLABさんが入力されたファイル名を読み取って グラフを表示するといったことがしたいのです。 (フォルダ内にたくさんあるCSVファイルから、好きなのを選びたい) そのため、私はcsvreadの引数であるファイル名を変数として みましたが、文字列じゃないとダメだと怒られます。 下記に私の書いたものをそのまま載せますので、ダメな点を指摘していただければと思います。 <<Mファイル>> Prompt = {'対象文字','Figure Number '}; Title = 'Dialog'; Def={'A','1'}; set_Dialog = inputdlg(Prompt,Title,1,Def); filename1 = strcat(set_Dialog(1,1),'_1.csv'); filename2 = strcat(set_Dialog(1,1),'_2.csv'); fig_num = set_Dialog(2,1); ↓ここからわかりません。↓ >>xy = csvread(filename); ??? エラー ==> csvread の 32 行目ファイル名は文字列でなければなりません。 >>xy = csvread('filename2'); ??? エラー ==> csvread の 38 行目ファイルが見つかりません

  • MATLABでのcsvreadで困っています。

    はじめして。 MATLABの記述方法についての質問です。 Filename = strcat(set_Dialog(1,1),'.csv'); として、Filenameをダイアログから入力できるようにできるようにしました。 ところが、csvread('ファイル名')の引数を文字列として認識させる方法が分かりません。 ご存知の方がいらっしゃいましたら、教えて下さい。 よろしく御願いいたします。

  • MATLABのCSV形式での書き込みについて

    MATLABにて計算させた結果をCSV形式で出力したいのですが, もともとCSVファイルに書き込んであるデータを消さずに, 追加書き込みとして,行と列を指定して書き込み出来るのでしょうか? もしできるのであれば, どのようなプログラムを組めばよいのでしょうか? どなたかご教授お願いします.

  • MATLABのCSV形式での書き込みについて

    MATLABにて計算させた結果をCSV形式で出力したいのですが, もともとCSVファイルに書き込んであるデータを消さずに, 追加書き込みとして,行と列を指定して書き込み出来るのでしょうか? もしできるのであれば, どのようなプログラムを組めばよいのでしょうか? どなたかご教授お願いします.

  • CSVファイルのデータ型について

    初めて質問します。よろしくお願いします。 拡張子「.xls」のファイルを「.csv」に変えるときに、データの形が変わってしまいます。 (エクセルでは「001」(文字列)のものが、CSVで保存すると「1」(数値)となってしまう) これを解決するために エクセルから文字列のデータを持ってきて貼り付け・保存しようとしましたが、 何度やってもデータは数値になってしまいます。 データ量が多いので、手ではとても直せません。。。 どなたか、よい方法がありましたらご教授ください。

  • CSVファイルについて

     文字ピタを使用してある印刷を行っており、CSVファイルを参照しています。しかし、CSVデータの中のある欄(口座番号・・・頭にゼロが付く)を文字列にして保存しても、再度開くと数値(頭のゼロが取れてしまう)になってしまいます。何か良い方法は無いでしょうか?

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

    Java初心者なので初歩的な質問をするかも知れませんが、ご勘弁ください。 今CSVファイルを読み込むプログラムを作っているのですが、 CSVファイルを列ごとに読み込みたいのです。(全体は読み込める) いろいろ調べましたが、全く方法がわかりません。 どうかご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • 漢字の入ったCSVファイルを読み込みたい。

    こんにちは。 python初心者の者です。 漢字の入った.csvファイルからその中の要素をリストに加えていくプログラムを作っています。 しかし、文字コードの問題からか、漢字が表示されず、困っています。 .csvファイルはexcelで作成し、.csv形式で保存しています。 以下にコードを載せるので、ご存知の方ご教授ください。 pythonは2.7 excelは2010を使っております。 【ソースコード】 import csv import codecs filename = raw_input('The file is ...') print 'Reading' + filename + '...' read_file = codecs.open(filename, 'r', 'utf-8') reader = csv.reader(read_file) list1 = [] for line in reader: list1.append(line) print list1 【.csvファイルをメモ帳で開いたイメージ】 小泉 片山 森山 田中 塩川 遠山 坂口 青木 富樫 山田

  • CSVファイルの読み込み

    以下のようなCSVファイルを読み込みたいと思っています。 0.575092,0.030525 0.565324,0.018315 0.555556,0.013431 0.553114,0.013431 0.54823,0.015873 0.538462,0.013431 0.531136,0.006105 0.52381,-0.003663 0.516484,-0.010989 0.501832,-0.015873 0.489622,-0.018315 0.477412,-0.020757 0.46276,-0.020757 ・ ・ ・ 50000*2のデータで、以下のようなプログラムを使用しました。 #include <stdio.h> #include <stdlib.h> #include <string.h> /* 確保するデータ保存領域の大きさ(N行×M列) */ #define N 50000 #define M 2 /* データの区切り文字 */ #define SEP_DATA ',' int csv_read(char filename[], double csv[N][M]) { /* ファイルオープン */ FILE *fp; if( (fp = fopen(filename, "r")) == NULL ) { printf(" file open error!!\n"); return -1; } /* 1行毎に読み出し */ char line[256], *ptr; int i, j, k; i=0; while (fgets(line, 256, fp) != NULL) { printf("*%s", line); ptr = line; j=0; do{ /* line[j]から次のタブ文字までを数値に変換 */ csv[i][j] = atof(ptr); /* 次のタブ文字の位置を探す */ ptr = strchr(ptr, SEP_DATA); /* タブ文字の次の文字を示す */ if (ptr!=NULL) { ptr++; } j++; }while(ptr!=NULL && j<M); i++; } /* ファイルクローズ */ fclose(fp); return 0; } int main(int argv, char *argc[]) { char filename[256]; if( argv > 1){ strcpy(filename, argc[1]); } else { printf("Please Input Filename:"); scanf("%s", filename); } /* データ保存用の領域を確保 */ double (*csvdata)[M]; csvdata = (double(*)[M])malloc(sizeof(csvdata) * N); if ( csvdata == NULL ){ return -1; } int i,j; /* 配列の初期化 */ for( i=0; i<N; i++) { for( j=0; j<M; j++) { csvdata[i][j] = 0.0; } } /* CSVデータの読み込み */ if( csv_read(filename, csvdata) < 0 ) { return -1; } /* 配列の出力 */ for( i=0; i<N; i++) { printf("%lf", csvdata[i][0]); for( j=1; j<M; j++) { printf("\t%lf", csvdata[i][j]); } printf("\n"); } free(csvdata); csvdata = NULL; return 0; } しかし、コンパイルは通るのですが実行時にエラーが出てしまいます。 データの大きさに問題があると思うのですが、原因がわかりません。おかしな所のご指摘を頂きたいです。よろしくお願いします。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------