2010-06-15 142 views
3

我有一個文本文件,並想將其導入到MATLAB,並使其成爲列表:如何將此文本文件轉換爲MATLAB中的列表?

Person1 
name = steven 
grade = 11 
age= 17 

Person2 
name = mike 
grade = 9 
age= 15 

Person3 
name = taylor 
grade = 11 
age= 17 

有幾百項這樣的上方。每個都由一個空行分隔。我想我可以掃描文本,並將每條空白行之間的信息放入列表中的一個項目中。一旦我擁有下面這樣的列表,我也希望能夠按名稱查找每個人。

我想是這樣的:

x = [Person1   Person2  Person3  
    name = steven name = mike name = taylor 
    grade = 11  grade = 9  grade = 11 
    age = 17  age = 15  age = 17] 

這看起來非常簡單,但我一直有這個麻煩至今。我可能會忽略一些東西。任何人有任何想法或建議?

+0

「age」應該在數據文件中和'='之間有一個空格嗎? – gnovice 2010-06-15 19:11:00

回答

5

有很多方法可以做到這一點。假設有應該是在數據文件中的age=(像其他領域)之間的空間,你可以使用TEXTSCAN

fid = fopen('people.txt','r');   %# Open the data file 
peopleData = textscan(fid,'%s %*s %s'); %# Read 3 columns of strings per row, 
             %# ignoring the middle column 
fclose(fid);        %# Close the data file 

然後,你可以處理數據以下列方式來創建一個3 ×1結構陣列字段'name''grade',並'age'

nFields = 3;          %# Number of fields/person 
fields = peopleData{1}(2:nFields+1);    %# Get the field names 
peopleData = reshape(peopleData{2},nFields+1,[]); %# Reshape the data 
peopleData(1,:) = [];        %# Remove the top row 
peopleData(2:nFields,:) = cellfun(@str2double,... %# Convert strings to numbers 
            peopleData(2:nFields,:),... 
            'UniformOutput',false); 
x = cell2struct(peopleData,fields,1);    %# Put data in a structure 

上面使用的功能RESHAPECELLFUNSTR2DOUBLE,和CELL2STRUCT

3

創建一個「人」的結構域「名稱」,「品位」和「時代」

然後結合regexp使用fgetl幾乎完全一樣你以前的有關基因的問題。

相關問題