matlab に読み込みたいデータ ファイルがいくつかあります。残念ながら、それらは非常に複雑な構造を持っています - 少なくとも私が慣れ親しんだものと比較して. この古い例をhttps://www.dropbox.com/s/vbh6kl334c5zg1s/fn1_2.outからダウンロードできるはずです(メモ帳またはワードパッドで問題なく開きます) 。
生データ、正規化された「生」データ、および(間接)フーリエ変換データ+データへの適合の両方がリストされているシンクロトロンデータに基づくデータファイルです。さらに、フーリエ変換からのいくつかの統計があります。
論文の統計から結果を引用する必要があるだけなので、結果の一部をプロットするのはよいことですが、厳密には必要ではありません。ただし、生の正規化されたデータと適合データ、およびフーリエ変換されたデータが必要です。
私の問題
データ ファイルでは、必要なデータの前に統計分析の結果が表示されます。ただし、統計分析の列のサイズはデータ ファイルごとに異なります。これは、インポートする各ファイルのヘッダー行数を手動で変更しない限り、ヘッダーに統計を含めることができないことを意味します。5つのデータファイルのグループをまとめて分析する必要があり、今回は少なくとも約30個のファイルを分析する必要があるため、可能であれば避けたい. 将来的には、この種のデータ ファイルを再度読み込む必要があります。ヘッダー行の数を 30 回変更しても問題ないように思えますが、自動的に変更できると便利です。
考えられる解決策
フーリエ変換されたデータと同様に、生データと正則化データの両方の前に特定の行があり、この行と空白/空の行の後にデータが始まることを示しています。
したがって、正規表現を使用して、この特定の行が表示されるまですべてを無視し、この行ともう 1 行を無視してからデータをインポートするように matlab に指示することができると思います
私はググって、正規表現が使用されているこのトピックを見つけました:かなり複雑なテキストファイルを解析しようとしています
しかし、私は正規表現が初めてで、提案されたコードは私にとって少し複雑です。彼が名前付きキャプチャを使用していることはわかりますが、彼がそれをどのように使用しているかを理解しているかどうか、また必要に応じて採用できるかどうかはよくわかりません。私は公式の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;
奇妙なレイアウト/コメントにリンクを残して申し訳ありません。投稿に2つ以上のリンクを含めることは許可されておらず、まだ新しい回答を追加することはできません-どちらも担当者が少ないためです:)