*.spa バイナリ ファイル形式は企業秘密ですか? しかし、Perkin Elmer は *.sp 形式を公開しました。
読み方?
4 に答える
このスレッドが少し古いことは承知していますが、最近 SPA ファイルを読む必要があり、それらにどう対処したかを共有したいと思います。
cooooldog が述べているように、0x41c オフセットは標準ではありません。ただし、このオフセットは spa ファイル自体にコーディングされています。
spa ファイルを編集する場合、先頭に短いヘッダーがあり、その後に多数のゼロがあります。0x11e からはゼロ以外の値です。
スペクトル ファイルの正しいオフセットを見つける方法を次に示し
ます。 0x11e から始めて、int32 値の読み取りを開始します。データ オフセットは、この値の直前にコード化されているようです: 54 18 00 00 (10 進数で 6228)。
編集 : 検索パターンが 54 18 00 00 ではなく 40 61 00 00 (24896) である新しい一連のスパ ファイルを受け取ったので、これも標準ではない可能性があります。実際、開始アドレスは、spa ファイルで 172h または 182h にコーディングされているようです。私はまだそれを見つける方法が必要です。
そのため、6228 を探すと、ファイル内で後でデータを見つけるために必要なオフセットは、この値 6228 の直前にある整数になります。spa
ファイルの編集を続けると、32 ビット コードの浮動小数点値がすぐ後に配置されていることがわかります。テキストの束。
今後は、0x41c を見つかったアドレスに置き換えるだけで、これらの値を読み取ることができます。
これが誰かを助けることができれば...
function address = getStart(filename)
try
% Open the file
fid=fopen(filename,'r');
% Jump where the values become interesting
fseek(fid,hex2dec('11e'),'bof');
% Pattern we're looking for
pattern = 6228;
suspect = 0;
while suspect~=pattern
oldSuspect = suspect;
suspect = fread(fid,1,'int32');
end
% The correct address is just before our current suspect
address = oldSuspect;
% Close the file
fclose(fid);
catch ex
address = 0;
disp(ex)
end
スペクトル オフセットが設定されている場所を見つけました。386 の位置にあります。
fseek(fid,386,'bof');
spectral_offset = fread(fid,1,'int32')
fseek(fid,spectral_offset,'bof');
spectrum=fread(fid,Number_of_DataPoints,'single');
https://cn.mathworks.com/matlabcentral/fileexchange/57904-loadspectra
FTIR および NIR 吸光度データを分析するには、スペクトル ファイルをインポートする必要があります。この関数は、.SPA 形式のファイルからデータを行列にロードし、スペクトルを列に編成します。
C/C++ 実装:
Github に小さなオープン ソース プロジェクトがあります。
https://github.com/aitap/spa2txt
このプログラムは、Nicolet FTIR スペクトル ファイル (*.spa 拡張子) を読み取り、最初の行がタイトルに対応し、他のすべての行が波数、タブ、吸光度、改行の形式であるテキスト ファイルを生成します。
使用法: *.spa ファイルをコマンド ライン引数としてフィードします。*.spa.txt という名前のファイルが作成されます。