2008-11-03 14 views
7

निम्न फ़ाइलASCII फाइलों से matlab चर में पाठ मान पढ़ना

var1 var2 variable3 
1  2 3 
11 22 33 
पर विचार करें

मैं एक चर कि के बराबर होगा में एक मैट्रिक्स में नंबर, और स्तंभ शीर्षक लोड करने में करना चाहते हैं:

variable_names = char('var1', 'var2', 'variable3'); 

मुझे नाम और संख्याओं को दो फाइलों में विभाजित करने की कोई बात नहीं है, हालांकि मैटलैब कोड फ़ाइलों को तैयार करना और उन्हें eval'ing एक विकल्प नहीं है।

नोट चर का एक मनमाना संख्या (कॉलम)

उत्तर

9

मेरा सुझाव है IMPORTDATA के संचालन के लिए इस तरह है 'डेटा' नामक सदस्य में संख्यात्मक फ़ील्ड के साथ संरचना, और 'कॉलहेडर' नामक फ़ील्ड में कॉलम हेडर।

इस तरह के मैनिप्लेटिंग डेटा आयात करने के लिए एक और उपयोगी इंटरफ़ेस सांख्यिकी टूलबॉक्स में उपलब्ध 'डेटासेट' श्रेणी है।

1

बस अलग स्वरूप विनिर्देशक साथ textscan का उपयोग हो सकता है कि।

fid = fopen(filename,'r'); 
heading = textscan(fid,'%s %s %s',1); 
fgetl(fid); %advance the file pointer one line 
data = textscan(fid,'%n %n %n');%read the rest of the data 
fclose(fid); 

इस मामले 'शीर्षक' में प्रत्येक स्तंभ के अंदर बढ़ रहा, ताकि आप उन्हें तार के सेल सरणी या जो कुछ भी यह है कि आप चाहते हैं में बदल करना होगा साथ कोशिकाओं से युक्त एक सेल सरणी हो जाएगा। 'डेटा' एक सेल सरणी होगी जिसमें आपके द्वारा पढ़े गए प्रत्येक कॉलम के लिए एक संख्यात्मक सरणी होगी, इसलिए आपको एक मैट्रिक्स बनाने के लिए उन्हें एक साथ बिल्ली रखना होगा।

+0

एक मनमाना संख्या (कॉलम) –

+0

हो सकता है यदि आप अग्रिम में कॉलम की संख्या नहीं जानते हैं तो आपको एक समय में फ़ाइल को एक पंक्ति को पढ़ना होगा। यदि आप textscan को एक% s और कोई सीमित संख्या के साथ कॉल करते हैं, तो यह लाइन से स्ट्रिंग की संख्या को पढ़ेगा। मुझे लगता है कि यह strtok का उपयोग करने से बेहतर/तेज है। –

3

हैडर पहली पंक्ति पर है तो

A = dlmread(filename,delimString,2,1); 

मैट्रिक्स ए में संख्यात्मक डेटा पढ़ा जाएगा

फिर आप उपयोग कर सकते हैं

fid = fopen(filename) 
headerString = fscanf(fid,'%s/n') % reads header data into a string 
fclose(fid) 

फिर आप उपयोग कर सकते हैं हेडर स्ट्रिंग को सेल सरणी में विभाजित करने के लिए strtok

d = importdata('filename.txt'); 

वापसी एक है: एक दृष्टिकोण मैं स्तंभों की संख्या ज्ञात नहीं

संपादित साथ इस समझौते में सोच सकते हैं

तय fscanf समारोह कॉल