разбирать текст с помощью Matlab - PullRequest
0 голосов
/ 04 октября 2010

У меня есть текстовый файл (вывод из старой программы), который я хотел бы очистить. Вот пример содержимого файла.

*|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). Каждый пакет должен иметь как минимум две выделенные строки (* |), которые затем читаются как комментарий. Белые линии между разными буквами заполнены символом * |. Строки между различными буквами, которые не начинаются с * | быть добавленным. Белые линии и символы «случайный» между одинаковыми буквами удалены.

Возможно, это более понятно в файлах примеров.

Как мне манипулировать текстом? Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 04 октября 2010

Используйте 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\|')

Вам нужно будет разбираться в регулярных выражениях. Хорошее руководство к ним можно найти по адресу регулярные выражения.info .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...