2016-01-26 4 views
1

У меня есть файл данных;извлечение совпадающих строк в текстовом файле

*************************** 
*************************** 
*************************** (header part) 
* 2004 11 8 0 0 0.00000000 
P 1 1000.4545 211.1214 54.5545 
P 3 5400.5454 1005.4545 -452.4899 
P 4 ........ ......... ....... 
P 5 ........ ......... ........ 
. 
. 
* 2004 11 8 0 15 0.00000000 
P 1 1085.4545 200.1214 54.5545 
P 3 5405.5454 1105.4545 -452.4899 
P 4 ........ ......... ....... 
P 5 ........ ......... ....... 

В текстовом файле имеется несколько «P 1», «P 3» и т. Д. Мне нужно определить все «P [0-9]» числовые строки, например;

P_1=[1000.4545 211.1214 54.5545;1085.4545 200.1214 54.5545]; 
p_3=[5400.5454 1005.4545 -452.4899;5405.5454 1105.4545 -452.4899]; 

Какие коды дают мне эту гибкость?

ответ

1

Используйте регулярное выражение с regexp. Если у вас есть данные в файле data.txt

txt = fileread('data.txt') 
parts = regexp(txt,'P\s*1\s*(\S*)\s*(\S*)\s*(\S*)','tokens') 
P_1 = [reshape(str2double([parts{:}]),3,[])]' 

Если вы хотите сделать это в цикле для всех 9 P, я бы предложил использовать массив ячеек, а не P_1P_2 и т.д. Вы можете построить выражение для regexp внутри петли довольно просто:

for i = 1:9 
    exp = ['P\s*', num2str(i), '\s*(\S*)\s*(\S*)\s*(\S*)']; 
    parts = regexp(txt,exp,'tokens') 
    P{i} = [reshape(str2double([parts{:}]),3,[])]'; 
end 
+0

Эти коды не дают правильного результата. Есть ли способ отправить или прикрепить исходный файл данных? –

+3

Нет, я не буду твоей работы за тебя. Что вы получили против того, что вы ожидали? Вы пытались прочитать о функциях, которые я использовал? –

+0

Также посмотрите здесь https://regex101.com/r/uG6yN7/2 –

Смежные вопросы