2015-08-16 5 views
0

Via TextScan, я читаю несколько .txt файлов:Сохранение строки из входного файла .txt - MATLAB

fid1 = Еореп ('Ev_An_OM2_l5_5000.txt', 'г');

Это упрощение, как в действительности я загрузки нескольких сотен .txt файлов через:

files = dir('Ev_An*.txt'); 

Важная информация не присутствует в .txt файлы, а не сами по себе являются частью файла.

Есть ли способ сократить фрагменты имени файла и сохранить их как строки/цифры? Например, сохранение «OM2» и «5000» из указанного выше имени файла в качестве переменных.

fileparts, как представляется, требует полного пути к файлу, а не только по умолчанию для папки MATLAB, как и для textscan.

+0

Как вы строите имя файла, в первую очередь, для использования в 'fopen'? Зачем вам нужно перепроектировать? –

+0

Добавлено изменение, чтобы объяснить это. – AnnaSchumann

+0

Вы неправильно поняли мой вопрос. Как вы можете сказать 'matlab', чтобы открыть' 'Ev_An_OM2_l5_5000.txt'', а не что-то еще? Как вы создаете это имя? У вас есть база данных с именами файлов? –

ответ

2

Это зависит от того, как исправлено ваше имя файла. Если имя файла в строке filename, то вы можете использовать regexp для извлечения части вашего файла, например, так:

filename = 'Ev_An_OM2_l5_5000.txt'; %or whatever 
parts = regexp(filename,'[^_]+_[^_]+_([^_]+)_[^_]+_([^\.]+)\.txt','tokens'); 

Это даст вам parts{1}=='OM2' и parts{2}=='5000', при условии, что ваш filename всегда в форме

something_something_somethingofinterest_something_somethingofinterest.txt 

Update:
Если вы любите больше, чем Структуры клеток, то вы можете назвать свои фишки так:

parts = regexp(filename,'[^_]+_[^_]+_(?<first>[^_]+)_[^_]+_(?<second>[^\.]+)\.txt','names'); 

В этом случае parts.first=='OM2' и parts.second=='5000'. Вы можете, очевидно, называть свои токены в соответствии с их фактическим значением, поскольку они важны. Вам просто нужно изменить first и second соответственно в коде выше.

Update2:
Если вы используете dir, чтобы получить ваши имена файлов, вы должны иметь массив структуры с нагрузками ненужной информации. Если вам действительно нужно просто имена файлов, я хотел бы использовать для цикла следующим образом:

files = dir('Ev_An*.txt'); 
for i=1:length(files) 
    filename=files(i).name; 
    parts = regexp(filename,'[^_]+_[^_]+_(?<first>[^_]+)_[^_]+_(?<second>[^\.]+)\.txt','tokens'); 

    %here do what you want with parts.first, parts.second and the file itself 
end 
+0

Что было бы лучшим способом извлечь имя файла в переменную, чтобы начать? – AnnaSchumann

+0

@AnnaSchumann см. Мой обновленный ответ –

+0

Отлично. Спасибо! +1 – AnnaSchumann

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