2012-09-18 47 views
1

我有一個龐大的數據,有7個colums和20000行。我讓Matlab讀取mydata:如何獲得帶有文本的每第n行

[tdata zdata kdata ldata mdata ndata pdata]=textread('mydata.txt') 

但我需要的是別的。我想讓Matlab收集每1000個數據。幫助textread給予解釋的第n個數據:

[tdata zdata kdata ldata mdata ndata pdata]=textread('mydata.txt',n). 

有什麼辦法與textread格式的微小變化,以做到這一點?或者我應該寫一個for循環?

+1

對於相關的問題,請參見:http://stackoverflow.com/questions/5531082/matlab-how-to-read-every-nth-line-of- a-text-file –

回答

2

它可能最簡單的,如果你讀的所有數據,並隨後裁剪掉不需要的數據:

[tdata zdata kdata ldata mdata ndata pdata] = textread('mydata.txt') 

tdata = tdata(1:1000:end); 
zdata = zdata(1:1000:end); 
kdata = kdata(1:1000:end); 
ldata = ldata(1:1000:end); 
mdata = mdata(1:1000:end); 
ndata = ndata(1:1000:end); 
pdata = pdata(1:1000:end); 

如果內存開銷過大,或者你覺得這是不可接受的,你必須寫一個循環與fgetl,沿着這些路線的東西:

fid = fopen('mydata.txt', 'r'); 
i = 0; 
while (~feof(fid)) 
    i = i + 1; 
    line = fgetl(fid); 

    if mod(i, 1000) == 0 
     parsed = textscan(line, '%f%f%f%f%f%f'); 
     %# etc. 

    end 
end 
+0

我不想使用for或while循環。我想不出第一個問題:(非常感謝你,這非常有幫助 – user1018331

+0

我可以問你一些關於你的第二條建議嗎?我會得到mod(1000)的每一行,但它有可能獲得它分別爲tdata,ydata,...等? – user1018331

+1

@ user1018331這就是'parsed = textscan(line,'%f%f%f%f%f%f');'是for; this split the line (j),ldata(j),...'(其中'j'在數組中增加了一個單獨的值,它們存儲在單元格數組''parsed''中。 'if'。) –