0

16 進数データとテキストを組み合わせた txt ファイルを読み込もうとしています。16進数を10進数に変換してから操作したい。ここにいくつかのサンプルデータがあります。

x 0:47950 0x---- 0x---- 001:00:07:56.633300 9-R-04-04 0x8000 0x0012 0x0000 0x0000

x 0:136994 0x---- 0x---- 001:00:13:14.350422 8-R-05-04 0x8000 0x0012 0x0000 0x0000

x 0:532637 0x---- 0x---- 001:00:40:29.861743 7-R-06-04 0x8000 0x0012 0x0000 0x0000

最初の 4 列はここでは役に立たない ('x 0:47950 0x---- 0x----') ですが、タイムスタンプ、タグ (9-R-04-04)、および 16 進数は私が見たいものですで。Matlab にこのデータを読み込ませ、16 進数を 10 進数に変換する方法についてのヘルプをいただければ幸いです。

4

2 に答える 2

0

タグが固定幅(ここでは 9 文字) でfscanf()ある限り、すべてを でインポートできます。最初の 4 つの文字列をスキップしてから、日 (?)、時間、分、秒をミリ秒で区切ったタイムスタンプをインポートし (これを にフィードできるように)、次に ASCII 位置にマップされたタグの 9 文字をインポートし、最後に4 つの 16 進数:datenum

fid  = fopen('test.txt');
data = fscanf(fid, '%*s %*s %*s %*s %f:%f:%f:%f %s %x %x %x %x',[17,inf])';
fclose(fid);
tag = cellstr(char(data(:,5:13)));

タイムスタンプに 4 つ、タグに 9 つの「文字」、4 つの 16 進数の合計 17 のフィールドがあることに注意してくださいdata。ただし、セル文字列に変換した後、タグに対応する数字を削除できます。

于 2013-07-01T19:41:04.267 に答える
0
% open and read the entire file
fid = fopen('temp.txt');
A = fread(fid);
fclose(fid);
% convert to text strings
txt = char(A)';
% create a cell array of lines
regexp(txt,'\n','split')
lines = regexp(txt,'\n','split');
% match the desired text
desTextCell = regexp(lines,'\d{3}:.+','match');
out = cellfun( @(x) regexp(x,'\s','split'), desTextCell);
out =
   {1x1 cell}    {1x1 cell}    {1x1 cell}     {}
out{1}{:}

ans = 

  Columns 1 through 5

    '001:00:07:56.633300'    '9-R-04-04'    '0x8000'    '0x0012'    '0x0000'

  Columns 6 through 7

    '0x0000'     ''

空のセルを除外したり、形状を変更したりする必要がありますが、それは手っ取り早い解決策です。

于 2013-07-01T19:15:45.003 に答える