0

.txt ファイルのインポートに関して質問があります。ファイルは以下の形式です。問題は、matlab がすべての「$」に続く「改行」文字インジケーターを認識していないように見えることです。そのため、matlab は 5 行目を連続したデータ ストリームとして認識します。

Data Matlab は以下を参照します。

01-24-2013 [6:01:53] 
Kp (0070.0000)
Ki  (0200.0000)
Kd (0009.0000)
$,0045,0044,0000.05,0011.53,0005.64,$,0045,0048,0000.04,0011.55,0005.66,$....etc
01-24-2013 [7:01:48]

データ ワードパッドには次の情報が表示されます。

01-24-2013 [6:01:53] 
Kp (0070.0000)
Ki  (0200.0000)
Kd (0009.0000)
$,0045,0044,0000.05,0011.53,0005.64,
$,0045,0048,0000.04,0011.55,0005.66,
$, ....

「csvread」を使用して「ワードパッド(再保存)」で表示される形式をインポートし、列1をスキップしても問題はありませんが、生の.txtファイル「Data Matlab sees」については、Matlabに方法を伝える方法が見つかりません読んだ。理想的には、Matlab に行 5 にスキップしてから、データの読み取りを開始し、「$」に遭遇するたびに行列 [nx5] に新しい行を作成するように指示したいと思います。「$」を検出し、データを使用可能な行列形式に再フォーマットする方法はありますか?

ありがとう!

4

1 に答える 1

1

どうやってこのデータを 1 行として読み取ったのかはわかりませんが、読み取って分割したいとします。そのために万能regexpを使用できます。

C = regexp(str, '\$,', 'split');

次に、文字列を数値に変換し、すべてを行列に変換します。

C = cellfun(@str2num, C, 'Uniform', false);
A = vertcat(C{:});

質問の2番目の部分について:

理想的には、Matlab に Row-5 にスキップしてからデータの読み取りを開始するように指示したいと思います...

textreadオプションを使用してそれを行うことができ'headerlines'ます:

C = textread('file.txt', '%s', 1, 'headerlines', 4, 'delimiter', '\n')
str = C{1};

regexp次に、文字列を分割するために使用するコードを使用しますstr

これは、説明したようにMATLABが実際に5行目を「見る」場合にのみ機能することに注意してください。そうでない場合は、マトリックスの最初の行のみを取得します。

str = '$,0045,0044,0000.05,0011.53,0005.64,$,0045,0048,0000.04,0011.55,0005.66';
C = cellfun(@str2num, regexp(str, '\$,', 'split'), 'Uniform', false);
A = vertcat(C{:})

これにより、次の結果が得られます。

A =
   45.0000   44.0000    0.0500   11.5300    5.6400
   45.0000   48.0000    0.0400   11.5500    5.6600
于 2013-01-29T16:56:41.617 に答える