0
我有一個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」和第一數值是變量名
- 的變量名和值由空間(S)分隔和「\」
- 的數據被「集總」 。每個塊在給定的模擬時間步中具有變量的值。在上面的例子中,有19個變量,因此每個塊總共有19個數字值。
- 可以有多個數據集;每個前面帶有「*浮動」和變量名節
以下是我如何處理目前這樣的數據:
- FILEREAD文件 - >字符的一個大的字符串
- regexprep { '\ S +' \ ' '\ n'}與', ' - >逗號分隔爲strsplit
- strfind 「* FLOAT」
- strsplit由',」 - >現在變成了細胞
- 找到第一個女士聚體通過值isnan(str2double(分析))
- 然後從2.索引和從4索引之間是變量名和從4索引和下一個之間的「* FLOAT」是數字數據
這個方案是有點工作,但我不能停止認爲有一個更好的方式來做到這一點。首先,步驟1非常緩慢。我想這是regexprep處理多個要替換的東西的一大字符串。
我該如何改進腳本?
爲什麼不使用'textscan'或其他解析文件而不是'regexp',因爲這對於一個巨大的字符串來說肯定會很慢。 – Suever