我有一些數據文件,我想加載到matlab中。不幸的是,他們有一個相當複雜的結構 - 至少與我習慣的相比。你應該可以在這裏下載一個老的例子https://www.dropbox.com/s/vbh6kl334c5zg1s/fn1_2.out(它可以在記事本或寫字板中打開)將一個非常複雜的結構導入到matlab中
它是基於同步加速器數據的數據文件,其中原始數據,規則化的「原始」數據和(間接)列出了傅里葉變換數據+擬合數據。還有一些來自傅里葉變換的統計數據。
我只需要引用我論文中的統計結果,所以儘管繪製一些結果會很好,但並不是絕對必要的。然而,我需要將原始的,正規化的數據與適合度以及傅里葉變換後的數據結合在一起。
我的問題
在數據文件中,從統計分析的結果,我需要的數據之前,如圖。但統計分析中列的大小因數據文件而異。這意味着我不能只將統計信息包含在標題中,除非我手動更改每個導入的文件的標題行數。我需要一起分析5個數據文件組,我至少需要分析大約30個文件,所以我想盡可能避免它。今後我將再次需要加載這種數據文件 - 所以即使改變headerlines次數30次聽起來並不糟糕,這將是很好能夠做到自動
可能的解決方法
無論是他原始,正規化連同擬合數據以及進行傅里葉變換數據是由告訴我,在此之後和一個空/空行,該數據開始
,所以我雖然具體的行前也許我可以用正則表達式來告訴matlab到忽略一切,直到你看到這個特定的線路,忽略此行,多了一個,然後再導入數據
我用Google搜索,發現這個話題當使用正則表達式:Trying to parse a fairly complex text file
,但我是新來的正則表達式和代碼建議對我來說有點複雜。我可以收集他使用命名捕獲,但我不太清楚我明白他是如何使用它,如果我可以採用它給我需要。我檢查了官方的matlab文檔,但他們的例子比較簡單:)(http://www.mathworks.se/help/matlab/matlab_prog/regular-expressions.html#bqm94nz-1)
對不起,寫了這麼長的文章。就如何處理這一問題進行的任何建議,將不勝感激
/馬丁
編輯
總部設在評論的鏈接我已經使用的代碼:
fileName = 'data.dat';
inputfile = fopen(fileName);
% Ignore all until we see one that just consists of this:
startString = ' R P(R) ERROR';
mydata = [];
while 1
tline = fgetl(inputfile);
% Break if we hit end of file, or the start marker
if ~ischar(tline) || strcmp(tline, startString)
break
end
data = sscanf(tline, '%f', 3);
mydata(end+1,:) = data;
end
fclose(inputfile);
當我運行代碼時出現錯誤:
Subscripted assignment dimension mismatch.
mydata(end+1,:) = data;
任何建議將大大appriciated和我的道歉奇怪的佈局/離開評論中的鏈接。我不允許在帖子中包含兩個以上的鏈接,而且我現在還不能添加新的答案 - 這是由於我不得不以低代表:)
我發現這種方法忽略了一切,直到一個特定的行:[鏈接](http://wiki.stdout.org/matlabcookbook/File%20IO/Skipping%20lines%20while%20reading%20a%20text%20file/ )。我已經嘗試加入解決方案,代碼顯示在下一條評論 – 2013-02-13 12:52:47