我有超过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];
这样的每个文件的名称(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 +,k-T,k-D。我主要使用的是C ++,并不熟悉如何在MATLAB中做类似的事情。任何帮助将不胜感激。我将感激你。
答案 0 :(得分:1)
Salam 3lykum!
一般来说,你应该在他的评论中做 rayryeng 所建议的,这可以这样做:
cd(fullPathOfTheFolderWithTheTxtFiles);
filenames0 = dir('*.txt');
filenames0 = {filenames0.name}'; ...'//See documentation of 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的列表:
sets = {k_plus, K_minus_T, K_minus_D};
[x,y,z] = ndgrid(sets{:});
cartProd = [x(:) y(:) z(:)];
接下来,您可以编写循环,也可以使用稍微不易读取的矢量化版本来执行此操作:
%// 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))}
答案 1 :(得分: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