2013-10-26 1 views
12

मैं MATLAB के साथ एक .csv फ़ाइल में पढ़ने की कोशिश कर रहा हूं। यहाँ मेरी कोड है:MATLAB के साथ सीएसवी फाइलें पढ़ रहे हैं?

csvread('out2.csv') 

यह out2.csv क्या लग रहा है की तरह है:

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 

खिड़कियों पर मैं कोई समस्या नहीं के साथ xlsread समारोह के साथ इस ठीक उसी फ़ाइल को पढ़ने में सक्षम हूँ। मैं वर्तमान में एक लिनक्स मशीन पर हूँ। जब मैंने फ़ाइल को पढ़ने के लिए पहले 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

कोशिश [readtext] (http://www.mathworks.com/matlabcentral/fileexchange/10946-readtext) के बजाय 'csvread' की। –

उत्तर

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}; 

अद्यतन (8/31/2017)

चूंकि यह 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 पढ़ता है। फ़ाइल में केवल संख्यात्मक मान हो सकते हैं।

/ के बाद से है न एक अल्पविराम, और न ही एक अंकीय मान, यह एक त्रुटि पैदा करता है।

संबंधित मुद्दे