2013-01-08 26 views
6

निम्नलिखित पर विचार करें:लिखने सेल सरणी

DateTime = {'2007-01-01 00:00';'2007-02-01 00:00';'2007-03-01 00:00'}; 
Headers = {'Datetime','Data'}; 
Dat = [100,200,300]; 

Data = [DateTime,num2cell(Dat')]; 
Final = [Headers;Data]; 

कैसे मैं एक टैब सीमांकित पाठ फ़ाइल में 'अंतिम' में डेटा लिखेंगे। मुझे पता है कि फॉपेन, एफप्रिंटफ और इतने पर कैसे उपयोग किया जाता है जब वेरिएबल पूरी तरह से संख्यात्मक इनपुट से बना है लेकिन इस समस्या को हल करने के लिए संघर्ष कर रहा हूं। मैंने कोशिश की है:

fid = fopen('C:\Documents\test.txt','wt'); 
fprintf(fid,'%s\t%s\n',Final{:}); 
fclose(fid); 

बहरहाल, यह एक पाठ फ़ाइल में एक ही प्रारूप में है कि के रूप में है कि matlab में उत्पन्न उत्पन्न नहीं करता है। इस समस्या को हल कैसे किया जा सकता है?

+0

+1 आपके द्वारा प्रदत्त आसानी से काम करने योग्य कोड के लिए – Acorbe

उत्तर

6

यह समाधान मुझे लगता है कि आपको क्या चाहिए; कुछ टिप्पणियों जो मैं उपयोगी होने की उम्मीद है तरफ

DateTime = {'2007-01-01 00:00';'2007-02-01 00:00';'2007-03-01 00:00'}; 
Headers = {'Datetime','Data'}; 
Dat = [100,200,300]; 


% // In the way you used fprintf it expects just strings ('%s\t%s\n'), 
% // therefore Data should be composed exclusively by them. 
% // Numbers are converted to strings by using num2str 
% // by using cellfun we iteratively convert every element of num2cell(Dat') 
% // in strings, obtaining a cell 
Data = [DateTime,cellfun(@num2str, num2cell(Dat'), 'UniformOutput' , false)]; 
Final = [Headers;Data]; 

fid = fopen('test.txt','wt'); 

% // this iterates fprintf on the cell rows, giving you the output 
cellfun(@(x,y) fprintf(fid,'%s\t%s\n',x,y),Final(:,1),Final(:,2));  
fclose(fid); 

परिणाम हैं

Datetime Data 
2007-01-01 00:00 100 
2007-02-01 00:00 200 
2007-03-01 00:00 300 

संपादित करें: एक एन-स्तंभ कोशिका के सामान्य मामले में (टिप्पणी से), आप कर सकते हैं बस लूप के लिए जाओ, उदाहरण के लिए

for i = 1 : size(Final,1) 
    fprintf(fid,'%s ', Final{i,:}); 
    fprintf(fid,'\n'); 
end 

(समान परिणाम, लेकिन कॉलम की संख्या के आधार पर नहीं)।

+0

ग्रेट उत्तर, हालांकि क्या होगा यदि सेल सरणी में 2 से अधिक कॉलम हों। 10 कॉलम, जिसमें अंतिम (:, 1), अंतिम (:, 2), अंतिम (:, 3) लिखना शामिल होगा। एक विधि होनी चाहिए जहां यह अलग-अलग कॉलम निर्दिष्ट किए बिना काम करे? – KatyB

+0

@Kate, यकीन है। दरअसल, इस मामले में पंक्तियों के लिए, सेलफोन क्या करता है बस लूप के लिए लपेट रहा है। आप क्या कर सकते हैं कॉलम से जुड़े लूप के लिए अपना खुद का लिखना। मैं सामान्य मामले के लिए जवाब बदल रहा हूँ। – Acorbe

+0

@ केट, कृपया एक नज़र डालें। – Acorbe