データポイントが多いasciiファイルにシミュレーションデータがあります。私はそれから変数名とその値を抽出しようとしています。以下のファイル形式がどのように見えるかの例です:非常に長い文字列を持つゆっくりとしたregexprep
*ESA
*COM on Tue Sep 27 15:23:02 2016
*COM C:\Users\vi813c\Documents\My Matlab\
*COM The pathname to the ESB file was: C:\Users\vi813c\Documents\My Matlab
Case013
*RTITLE
Run Date/Time = 20-SEP-2016 13:29:00
MSC.EASY5 time-history plot with 20001 data points
*EOD
*FLOAT
TIME FDLB(1) FSLB(1) FVLB(1) MXLB(1) \
MYLB(1) MZLB(1) FDLB(2) FSLB(2) FVLB(2) \
MXLB(2) MYLB(2) MZLB(2) FDLB(3) FSLB(3) \
FVLB(3) MXLB(3) MYLB(3) MZLB(3)
0 884.439 -0 53645.8 -972.132
-311780 207.866 5403.68 1981.49 327781
258746 -1.74898E+006 84631.4 5384.25 -1308.47
326538 -97028.6 -1.74013E+006 -61858.1
0.002 882.616 0.008033 53661.1 -972.4
-311702 207.779 5400.42 1982.11 327784
258726 -1.74906E+006 84628.3 5381.01 -1308.44
326541 -97040.1 -1.74021E+006 -61858.8
0.004 876.819 0.031336 53705.6 -973.183
-311683 207.661 5391.19 1983.9 327795
258693 -1.74935E+006 84624 5371.85 -1309.63
326552 -97040.6 -1.74051E+006 -61858.8
0.006 869.491 0.061631 53763.3 -974.213
-311806 207.618 5377.45 1986.76 327813
258659 -1.74995E+006 84621.7 5358.2 -1312.04
326569 -97040.3 -1.7411E+006 -61861
0.008 861.718 0.095625 53828.1 -975.379
-312039 207.648 5360.82 1990.12 327834
次のようなデータ形式の特性の概要は次のとおりです。
- すべては「* FLOAT」は、ヘッダ上であると私は取得する必要があります「* FLOAT」と最初の数値の間にそれ
- スタッフのRIDは、変数名
- 変数名と値はスペースで区切られます(複数可)と「\」
- ているデータは「集中」されています。各塊は、所与のシミュレーション時間ステップにおける変数の値を有する。上記の例では、19個の変数があり、各塊に19個の数値があります。
- 複数のデータセットがあります。 >文字の一つの大きな文字列
- のregexprep -
- がファイルをFILEREAD:それぞれが「*のFLOAT」と変数名のセクション
私は現在、このデータを処理していますどのようにされ、次で始まります、 'で{\ '' \ n 'は\は、+ S'}' ' - によって>コンマstrsplit
- strfindため区切ら "* FLOAT"
- strsplit'、」 - >今細胞 なります
- 最初のヌを見つけるISNANによって量体値(関数str2double(パース))2からインデックス及び4から指標間次に
- は変数名であり、4からインデックスと次との間に「* FLOAT」数値データである
このスキームはうまく機能しますが、これを行うためのより良い方法が必要であると考えることをやめることはできません。 1つは、ステップ1が非常に遅いことです。私はregexprepが複数のものを置き換えて作業するための大きな文字列だと思います。
スクリプトを改善するにはどうすればよいですか?
'textscan'や、' regexp'ではなく、ファイルを解析するために作られたものは、巨大な文字列に対して遅くなるため、なぜ使用しないのですか? – Suever