2014-03-05 74 views
0

我有一個txt文件與這些條目,我想知道如何從第二列獲取數值直到矩陣的最後一列和單元格的第一列陣列。閱讀一個txt文件矩陣和cellarray Matlab

我試過導入數據和fscanf,我不明白髮生了什麼事情。

CP6 7,2 -2,7  6,6 

P5 -5,8 -5,9  5,8 

P6 5,8 -5,9  5,8 

AF7 -5,0  7,2  3,6 

AF8 5,0  7,2  3,6 

FT7 -7,6  2,8  3,6 
+3

提供您的你已經嘗試 – Dan

回答

0

這個函數應該有效。它讀取您的文件並根據您的模式進行掃描。然後,把第一列放在一個單元格陣列中,其他的放在一個矩陣中。

function [ C1,A ] = scan_your_txt_file(filename) 
    fid = fopen(filename,'rt'); 

    C = textscan(fid, '%s %d,%d %d,%d %d,%d'); 
    fclose(fid); 

    C1 = C{1}; 
    A = cell2mat(C(2:size(C,2))); 
end 
+0

艾蒂安。你的代碼與Duck發給我的相似。也非常感謝你的幫助。這是可以理解的。 – Gohann

0

您是否嘗試過xlsread?它使數字數組和兩個非數字數組。

[N,T,R]=xlsread('yourfilename.txt') 

但您的數據不是逗號分隔的。它看起來像使用逗號來表示小數點。這個數組有7列還是4列?因爲我在美國,所以我會假設你已經配對了座標,而逗號是一種分隔符,而空格是第二種。

所以這裏有一些klugy,但它的工作原理。這是一個嚴重的醜陋的黑客攻擊,但它有效。

%housekeeping 
clc 

%get name of raw file 
d=dir('*22202740*.txt') 

%translate from comma-as-decimal to period-as-decimal 
fid = fopen(d(1).name,'r') %source 
fid2= fopen('myout.txt','w+') %sink 

while 1 
    tline = fgetl(fid); %read 
    if ~ischar(tline), break, end %end loop 
    fprintf(fid2,'%s\r\n',strrep(tline,',','.')) %write updated line to output 
end 

fclose(fid) 
fclose(fid2) 

%open, gulp, parse/store, close 
fid3 = fopen('myout.txt','r'); 
C=textscan(fid3,'%s %f %f %f '); 
fclose(fid3); 

%measure waist size and height 
[n,m]=size(C); 
n=length(C{1}); 

%put in slightly more friendly form 
temp=zeros(n,m); 

for i=2:m 
    t0=C{i}; 
    temp(:,i)=t0; 
end 

%write to excel 
xlswrite('myout_22202740.xlsx',temp(:,2:end),['b1:' char(96+m) num2str(n)]); 
xlswrite('myout_22202740.xlsx',C{1},['a1:a' num2str(n)]) 

%read from excel 
[N,T,R]=xlsread('myout_22202740.xlsx') 

如果你想這些逗號是小數點,那麼這是一個不同的問題。

+0

EngrStudent代碼。非常感謝你的幫助。不幸的是我不工作。 xlsread似乎只適用於excel而不適用於txt。 – Gohann

+0

如果用逗號分隔,則文本起作用。嗯。 – EngrStudent

+0

是的工程師。在這裏使用逗號來表示小數點,而不是分隔符。所以這裏有4列和6行。顯然這是一個巨大的txt文件。原來的有很多行。我嘗試將你的代碼實現到我的文件中。非常感謝好友。 – Gohann

1

這應該根據您提供的文本樣本給你想要的。

fileID = fopen('x.txt'); %open file x.txt 
m=textscan(fileID,'%s %d ,%d %d ,%d %d ,%d'); 
fclose(fileID); %close file 
col1 = m{1,1}; %get first column into cell array col1 
colRest = cell2mat(m(1,2:6)); %convert rest of columns into matrix colRest 

查找textscan更多信息閱讀特殊格式的數據

+0

鴨子。這是值得的。非常感謝。 – Gohann