2013-10-26 48 views
12

MATLABで.csvファイルを読み込もうとしています。ここに私のコードは次のとおりです。私は何の問題もなく関数xlsread機能を備えたこのまったく同じファイルを読み取ることができていますMATLABでCSVファイルを読み込む?

Windows上
03/09/2013 23:55:12,129.32,129.33 
03/09/2013 23:55:52,129.32,129.33 
03/09/2013 23:56:02,129.32,129.33 

csvread('out2.csv') 

これは次のようにout2.csvが見えるものです。私は現在Linuxマシン上にいる。最初にxlsreadを使ってファイルを読み込んだとき、「ファイルが認識された形式ではない」と言われたので、csvreadを使用するように切り替えました。しかし、csvreadを使用すると、次のエラーメッセージが表示されます。

Error using dlmread (line 139) 
Mismatch between file and format string. 
Trouble reading number from file (row 1u, field 2u) ==> /09/2013 
23:55:12,129.32,129.33\n 

Error in csvread (line 48) 
m=dlmread(filename, ',', r, c) 

日付の '/'は問題の原因と考えています。ウィンドウでは、第1列は文字列として解釈されます。 Linux上では数値と​​して解釈されるように見えるので、数値を読み取ろうとし、バックスラッシュで失敗します。これは少なくとも私が考えていることです。どんな助けでも本当に感謝しています。

+1

代わりcsvread' 'の[READTEXT(http://www.mathworks.com/matlabcentral/fileexchange/10946-readtext)試みます。 –

答えて

22

csvreadはダブルスのみを読み取ることができるため、日付フィールドで窒息します。 textscanを使用してください。

fid = fopen('out2.csv'); 
out = textscan(fid,'%s%f%f','delimiter',','); 
fclose(fid); 

date = datevec(out{1}); 
col1 = out{2}; 
col2 = out{3}; 

アップデート(2017年8月31日)

これは2013年に戻って書かれていたので、MATLABのtextscan機能は直接日付と時刻を読み取るように更新されています。今のコードは次のようになります。

fid = fopen('out2.csv'); 
out = textscan(fid, '%{MM/dd/uu HH:mm:ss}D%f%f', 'delimiter', ','); 
fclose(fid) 

[date, col1, col2] = deal(out{:}); 

代替を下回っ@Victorヒューゴ言及(そして現在、私の個人的な状況のこのタイプのためのゴーには)同じ書式文字列を受け入れるreadtableを使用することであろうとtextscanとしてではなく、テーブルオブジェクトに直接結果を組み立てる:

dataTable = readtable('out2.csv', 'Format', '%{MM/dd/uu HH:mm:ss}D%f%f') 
dataTable.Properties.VariableNames = {'date', 'col1', 'col2'}; 

dataTable = 

    3×3 table 

      date    col1  col2 
    ___________________ ______ ______ 

    03/09/2013 23:55:12 129.32 129.33 
    03/09/2013 23:55:52 129.32 129.33 
    03/09/2013 23:56:02 129.32 129.33 
6

残念ながら、csvreadためthe documentationは明確に述べている:

M = csvread(filename)は、カンマ区切り値形式のファイル、filenameを読み込みます。 ファイルには数値のみを含めることができます。 /以来

は、それがエラーを生成し、コンマ、また数値でもありません。

関連する問題