2010-10-04 24 views
0

我有一個我想要清理的文本文件(從舊程序輸出)。這是一個文件內容的例子。用Matlab解析文本

*|V|0|0|0|t|0|1|1|4|11|T4|H01|||||||||||||||||||||| 


P|40|0.01|10|1|1|0|40|1|1|1||1|*||0|0|0|||||||||||||||| 
*|A1|A1|A7|A16|F|F|F|F|F|F|F||||||||||||||||||||||| 
*|||||kV|kV|kV|MW|MVAR|S|S|||||||||||||||||||||||| 
N|I|01|H01N01|H01N01|132|125.4|138.6|0|0||||||||||||||||||||| 
N|I|01|H01N02|H01N02|20|19|21|0|0||||||||||||||||||||||| 
N|I|01|H01N03|H01N03|20|19|21|0.42318823|0.204959433||||||||||||||||||||| 
||||||||||||||||| 
||||||||||||||||| 
L|I|H010203|H01N02|H01N03|1.884|360|0.41071|0.207886957||3.19E-08|3.19E-08||||||||||| 
L|I|H010304|H01N03|H01N04|1.62|360|0.35316|0.1787563||3.19E-08||3.19E-08|||||||||||| 
L|I|H010405|H01N04|H01N05|0.532|360|0.11598|0.058702686||3.19E-08||3.19E-08||||||||||| 
L|I|H010506|H01N05|H01N06|1.284|360|0.27991|0.14168092||3.19E-08||3.19E-08|||||||||||| 
S|SH01|SEZIONE01|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH02|SEZIONE02|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH03|SEZIONE03|1|-3|+3|-100|+100||||||||||||||||||| 
||||||||||||asasasas 
S|SH04|SEZIONE04|1|-3|+3|-100|+100||||||||||||||||||| 
*|comment 
S|SH05|SEZIONE05|1|-3|+3|-100|+100||||||||||||||||||| 

我想它看起來像:

*|V|0|0|0|t|0|1|1|4|11|T4|H01|||||||||||||||||||||| 
*|comment 
*|comment 
P|40|0.01|10|1|1|0|40|1|1|1||1|*||0|0|0|||||||||||||||| 
*|A1|A1|A7|A16|F|F|F|F|F|F|F||||||||||||||||||||||| 
*|||||kV|kV|kV|MW|MVAR|S|S|||||||||||||||||||||||| 
N|I|01|H01N01|H01N01|132|125.4|138.6|0|0||||||||||||||||||||| 
N|I|01|H01N02|H01N02|20|19|21|0|0||||||||||||||||||||||| 
N|I|01|H01N03|H01N03|20|19|21|0.42318823|0.204959433||||||||||||||||||||| 
*|comment|||||||||||||||| 
*|comment||||||||||||||||| 
L|I|H010203|H01N02|H01N03|1.884|360|0.41071|0.207886957||3.19E-08||3.19E-08||||||||||| 
L|I|H010304|H01N03|H01N04|1.62|360|0.35316|0.1787563||3.19E-08||3.19E-08|||||||||||||| 
L|I|H010405|H01N04|H01N05|0.532|360|0.11598|0.058702686||3.19E-08||3.19E-08||||||||||| 
L|I|H010506|H01N05|H01N06|1.284|360|0.27991|0.14168092||3.19E-08||3.19E-08|||||||||||| 
*|comment 
*|comment 
S|SH01|SEZIONE01|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH02|SEZIONE02|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH03|SEZIONE03|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH04|SEZIONE04|1|-3|+3|-100|+100||||||||||||||||||| 
S|SH05|SEZIONE05|1|-3|+3|-100|+100||||||||||||||||||| 

的數據分爲 '包' 不同於第一個字母(PNLS)。每個包必須至少有兩條專用線(* |),然後將其作爲註釋讀取。不同字母之間的白線充滿字符* |。不以*開頭的各種字母之間的連線被添加。相同字母之間的白線和字符「隨機」被刪除。

也許它在示例文件中更清楚。

如何操作文本?預先感謝您的幫助。

+0

你的問題是什麼? – 2010-10-04 09:26:47

回答

0

使用fileread將您的文件導入MATLAB。

text = fileread('my file to clean.txt'); 

通過分割新行來分割結果字符串。 (新行字符取決於您的操作系統。)

lines = regexp(text, '\r\n', 'split'); 

這是不完全清楚你到底想如何清理文件,但這些事情可能讓你開始。

% Replace blank lines with comment string 
blanks = cellfun(@isempty, lines); 
comment = '*|comment'; 
lines(blanks) = cellstr(repmat(comment, sum(blanks), 1)) 

% Prepend comment string to lines that start with a pipe 
lines = regexprep(lines, '^\|', '\*\|comment\|') 

你將需要知道你的正則表達式。在regular-expressions.info有一個很好的指導。

+0

感謝您的幫助。我看到這個鏈接非常有用。 – Marietto85 2010-10-08 07:13:57