2013-01-23 22 views
8

मुझे लगता है कि एक .csv फ़ाइल कि तरह लग रहा है के रूप में सहेजा गया है एक डेटा सेट निम्नलिखित:मैटलैब में सीएसवी फाइलों को कैसे पढ़ा जाए जैसा आप आर में करेंगे?

Name,Age,Password 
John,9,\i1iiu1h8 
Kelly,20,\771jk8 
Bob,33,\kljhjj 

आरआई में पालन करते हुए इस फ़ाइल को खोलने सकता है:

X = read.csv("file.csv",header=TRUE) 

वहाँ एक डिफ़ॉल्ट आदेश है Matlab में जो .csv फ़ाइलों को संख्यात्मक और स्ट्रिंग चर दोनों के साथ पढ़ता है? csvread केवल संख्यात्मक चर की तरह लगता है।

एक कदम आगे, अनुसंधान में मैं, डेटा सेट के तेह कॉलम और कॉलम हेडर, अर्थात के साथ जुड़े के साथ चर बनाने का समारोह देते इस्तेमाल कर सकते हैं

attach(X) 

वहाँ Matlab में कुछ इसी तरह है?

+2

सटीक अनुलिपि http://stackoverflow.com/questions/9248789/matlab-how-to-import-multiple-csv-files-with-mixed- डेटा-प्रकार? RQ = 1)। – N8TRO

+2

अंतिम भाग आर में 'संलग्न' के बारे में एक सूक्ष्म लेकिन महत्वपूर्ण गलतफहमी है। यह कॉलम नामों को संलग्न वातावरण में ही उजागर करता है। अंतर महत्वपूर्ण है क्योंकि उन चरों में बदलाव तब तक नहीं रहेगा जब 'अलग (एक्स)' निष्पादित किया जाता है। 'संलग्न' का उपयोग निराश है। –

+0

@NathanG मैं सहमत हूं कि यह एक सटीक डुप्लिकेट होने के लिए * बंद * है - लेकिन मुझे नहीं लगता कि यह एक डेटासेट में हेडर संलग्न करने के बारे में पूछे जाने वाले अतिरिक्त प्रश्न के कारण सटीक है। मैंने वैसे भी एक उत्तर प्रदान करना चुना है, क्योंकि मैं व्यक्तिगत रूप से 'xxread'' नहीं, इस समस्या को हल करने के लिए 'textscan' का उपयोग करता हूं। लिंक्ड उत्तर 'textscan' पर बहुत कम जानकारी प्रदान करता है - वास्तव में दस्तावेज़ों के लिए वास्तव में एक लिंक। –

उत्तर

6

हालांकि यह प्रश्न सटीक डुप्लिकेट होने के करीब है, @NathanG द्वारा प्रदान किए गए लिंक में सुझाए गए समाधान (यानी, xlsread का उपयोग करके) आपकी समस्या का समाधान करने का एक ही संभावित तरीका है। कड़ी में लेखक भी textscan उपयोग करने का सुझाव है, लेकिन यह कैसे करना है के बारे में कोई जानकारी प्रदान नहीं करता, इसलिए मैंने सोचा कि मैं यहाँ एक उदाहरण जोड़ेंगे:

%# First we need to get the header-line 
fid1 = fopen('file.csv', 'r'); 
Header = fgetl(fid1); 
fclose(fid1); 

%# Convert Header to cell array 
Header = regexp(Header, '([^,]*)', 'tokens'); 
Header = cat(2, Header{:}); 

%# Read in the data 
fid1 = fopen('file.csv', 'r'); 
D = textscan(fid1, '%s%d%s', 'Delimiter', ',', 'HeaderLines', 1); 
fclose(fid1); 

Header अब कोशिकाओं की एक पंक्ति वेक्टर होना चाहिए , जहां प्रत्येक सेल एक हेडर स्टोर करता है। D कोशिकाओं की एक पंक्ति वेक्टर है, जहां प्रत्येक सेल डेटा के कॉलम को संग्रहीत करता है।

कोई तरीका नहीं है कि मुझे D से Header "संलग्न" करने का कोई तरीका नहीं है। यदि आप चाहते हैं तो आप उन दोनों को एक ही संरचना में डाल सकता है, हालांकि, अर्थात्:

S.Header = Header; 
S.Data = D; 
+0

आप सेल सरणी का उपयोग करके और हेडर को अपने सेल सरणी की पहली पंक्ति बनाकर "संलग्न" कर सकते हैं, जैसा कि यह .csv फ़ाइल में किया गया था। ऐसा करने का एकमात्र समय यह है कि जब मैं एक्सेल को परिणामी सेल सरणी लिखने जा रहा हूं। यह अन्य संदर्भों में तुच्छ लग सकता है, लेकिन मुझे लगता है कि यह ध्यान देने योग्य है। – dgoverde

0

मैं इस दृष्टिकोण, मैटलैब 2012 तक समर्थित पसंद आया

path='C:\folder1\folder2\'; 
data = 'data.csv'; 
data = dataset('xlsfile',sprintf('%s\%s', path,data)); 
cource के

आप निम्न कार्य कर सकता है:

[data,path] = uigetfile('C:\folder1\folder2\*.csv'); 
data = dataset('xlsfile',sprintf('%s\%s', path,data)); 
3

मैटलैब की नई तालिका वर्ग इस आसान बनाता है:

X = readtable('file.csv'); 

डिफ़ॉल्ट रूप से यह हेडर पार्स होगा, और उन्हें स्तंभ नाम के रूप में उपयोग (भी बुलाया चर नाम):

>> x 

x = 

Name  Age  Password 
_______ ___ ___________ 

'John'  9  '\i1iiu1h8' 
'Kelly' 20  '\771jk8' 
'Bob'  33  '\kljhjj' 

आप उसका नाम आदि .:

>> x.Name 

ans = 

    'John' 
    'Kelly' 
    'Bob' 

उपलब्ध का उपयोग कर एक कॉलम चुन सकते हैं Matlab 2013b के बाद से। देखें www.mathworks.com/help/matlab/ref/readtable.html

[आयात सीएसवी मिश्रित डेटा प्रकार के साथ matlab के लिए] (की

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

  • कोई संबंधित समस्या नहीं^_^