2014-08-19 4 views
1

У меня есть более 3000 файлов данных TXT. Я создаю имя для этих файлов по специальному курсу h=[1]; k+=[0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; K-T=[1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; K-D=[1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5];Чтение данных из более чем 2000 файлов txt в matlab

Имя каждого файла, как этот (MTN100_k + 0.1_k-T_0.1_k-D0.4_h1_GTP0.txt) Как я могу читать эти файлы в Matlab. Мне нужно работать с каждым файлом отдельно. Я пытался использовать dlmread и fscan, но это не полезно. Мне нужно некоторое программирование, просто напишите алгоритм, чтобы автоматически генерировать правильное имя файла.

, например, если мои имена файлов является:

MTN100_k + 0.1_k-T_0.1_k-D0.4_h1_GTP0.txt)

MTN100_k + 0.1_k-T_0.1_k-D0.7_h1_GTP0.txt)

MTN100_k + 0.1_k-T_0.1_k-D1_h1_GTP0.txt)

h1 и GTP0 фиксированы мне просто нужно изменить K +, кТ, кД. Я в основном использую C++ и не очень хорошо разбираюсь в том, как делать подобные вещи в MATLAB. Любая помощь будет принята с благодарностью. Буду признателен вам.

+1

Используйте 'dir', чтобы получить список файлов, которые являются'. txt', затем используйте цикл 'for' для итерации по каждому имени файла и загрузки данных. – rayryeng

ответ

1

Salam 3lykum!

Как правило, вы должны делать то, что rayryeng предложил в своем комментарии, которые могут быть сделано, как это:

cd(fullPathOfTheFolderWithTheTxtFiles); 
filenames0 = dir('*.txt'); 
filenames0 = {filenames0.name}'; ...'//See documentation of dir. 

См: cd, dir.

Однако, если вас интересует, как может быть сгенерирован программный код списка файлов, я предоставляю следующий ответ.

Я предполагаю, что существуют все возможные комбинации для имен файлов для k+, k-T и K-D.

Ради объяснения, давайте определим 3 векторов следующим образом:

k_plus =[0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
K_minus_T = [1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
K_minus_D = [1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 

Что я буду делать в первую очередь, чтобы создать список all possible combinations of these vectors:

Далее вы можете написать петля или сделать это со слегка менее легко читаемой векторизованной версией:

%// Loop Version: 
nFiles = size(cartProd,1); 
filenames1{nFiles,1}=[]; %// Preallocation 
for ind1=1:nFiles 
    filenames1{ind1} = ['MTN100_' ... 
     'k+' num2str(cartProd(ind1,1)) '_' ... 
     'k-T' num2str(cartProd(ind1,2)) '_' ... 
     'k-D' num2str(cartProd(ind1,3)) '_' ... 
     'GTP0.txt']; 
end 
%// Vectorized Version: 
filenames2=cellstr([repmat('MTN100_k+',[nFiles,1]) num2str(cartProd(:,1)) ... 
        repmat('_k-T',[nFiles,1]) num2str(cartProd(:,2)) ... 
        repmat('_k-D',[nFiles,1]) num2str(cartProd(:,3)) ... 
        repmat('_GTP0.txt',[nFiles,1])]);  

Затем вы можете перебрать полученный массив и сделать все, что вам нужно, с файлами.

В качестве альтернативы, если вы хотите, чтобы найти имя файла определенной комбинации значений, вы могли бы использовать что-то вроде этого:

kP_wanted = k_plus(4); 
kT_wanted = K_minus_T(9); 
kD_wanted = K_minus_D(2); 

filenames{intersect(intersect(find(cartProd(:,1)==kP_wanted),... 
           find(cartProd(:,2)==kT_wanted)),... 
           find(cartProd(:,3)==kD_wanted))} 
+0

Спасибо Dev-iL, ваш код действительно полезен. Я сделал некоторые изменения, и я получил имя файла, как я хочу. К сожалению, я попытался прочитать каждый файл внутри цикла, но не смог. Я использовал txtread, txtscan, но он не работает. –

+0

Уважаемый Dev-iL, я разместил код, который использовал в вашем комментарии. Я попытался использовать fopen, tx = textread, textscan, чтобы прочитать его данные, но он не работает. Интересно, можете ли вы мне помочь. –

+0

Похоже, что исходная проблема получения имен файлов решена, не так ли? Что касается textread \ textscan, это будет другой вопрос, подумайте о публикации его отдельно. –

0
clc; 
    clear all; 
    close all; 
    %% 
    h=[1]; 
    k_plus =[0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
    K_minus_T =[1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
    K_minus_D = [1e-6 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
    sets = {k_plus, K_minus_T, K_minus_D,h}; 
    [x,y,z r] = ndgrid(sets{:}); 
    cartProd = [x(:) y(:) z(:) r(:)]; 
    nFiles = size(cartProd,1); 
    filename{nFiles,1}=[]; 
    for i=1:nFiles 
     filename{i} = ['MTN100_' ...   
      'k+' num2str(cartProd(i,1)) '_' ... 
      'k-T_' num2str(cartProd(i,2)) '_' ... 
      'k-D' num2str(cartProd(i,3)) '_' ... 
      'h' num2str(cartProd(i,4)) '_' ... 
      'GTP0.txt']; 
      end 
Смежные вопросы