2017-06-15 107 views
0

我一直妄圖爲天做一個看似簡單的事情 - 我想讀一個txt文件,看起來像這樣的數據:讀取數據到Matlab

0.221351321 
    0.151351321 
    0.235165165 
    8.2254546 E-7 

成Matlab的。我已經能夠使用的fscanf命令加載的.txt文件的列向量數據,就像這樣:

U=fscanf(FileID, '%e') 

前提是我經歷的第一個文件和「E」之前刪除空間無論科學記數法發生在數據集中。

由於我必須生成大量這樣的集合,因此必須對每個.txt文件執行搜索和替換操作是不切實際的。

有沒有一種方法讓matlab讀取數據,就像上面的例子(前面的'E'前面的空格)一樣,並且把它放到列向量中?

對於任何知道PARI-GP的人來說,一種替代的修復方法是讓輸出中沒有空格 - 但到目前爲止,我還沒有找到一種方法來清除E之前的空間符號,我無法預測科學記數法中的數字是否會出現在數據集中。

謝謝!

回答

1

謝謝大家的幫助,我找到了解決辦法。有一種方法可以從PARI-GP中刪除空間,以便輸出.txt文件沒有空格開始。我有輸出設置爲「prettymatrix」。人們需要輸入以下內容:

? \o{0} 

改變其在科學記數法「E」之前消除了空間的輸出爲「原始」。

再次感謝您的幫助。

0

一個簡單的方法,可能不是最好的,是逐行讀取,刪除空間並轉換回浮點數。

例如,

x = [] 
tline = fgetl(FileID); 
while ischar(tline) 
    x = [x str2num(tline(find(~isspace(tline))))] 
    tline = fgetl(FileID); 
end 
+0

感謝您的及時回覆! –

0

一個襯裏:

data = str2double(strsplit(strrep(fileread('filename.txt'),' ',''), '\n')); 

strrep刪除所有的空間,需要strsplit每條線作爲一個單獨的字符串,並str2double羽琴絃爲數字。

+0

感謝您的迴應!我目前正在嘗試修復。 –

+0

我確定它會起作用,而且它似乎在工作,如果我正在使用這個文件的文件更小 - 它有十億行! –