我有超过3000个数据txt文件。我根据此代码的特殊费率为这些文件创建名称
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
现在我想读取循环中的每个文件并进行一些处理。我尝试使用文本扫描和文本阅读,但它不起作用。
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'];
file1=fopen(filename{i},'r')
C=textscan(filename{i},'%u');
t1 = C(1,:);
d1 = C(3,:);
plot(t1, d1, 'b*-', 'LineWidth', 2, 'MarkerSize', 3);
fclose(filename{i});
end
我主要使用C ++,并不熟悉如何在MATLAB中执行类似的操作。非常感谢帮助。我将感激你。
答案 0 :(得分:1)
我不确定您遇到的问题是什么,但我在您的代码中发现了一些错误。 fopen
会返回一个文件ID,然后您应该将此文件ID传递到textscan
和fclose
,而不是文件名。 textscan
的第二个参数是您正在扫描的单行数据的格式说明符。您在评论中提到有7个真实值,我已将formatspec
设置为'%f%f%f%f%f%f%f'
,这会将值视为双精度值。如果您的值用空格以外的任何空格分隔,则您需要在文本扫描调用中添加分隔符信息。
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'];
file1=fopen(filename{i},'r')
C=textscan(file1,'%f%f%f%f%f%f%f');
fclose(file1);
t1 = C(1,:);
d1 = C(3,:);
plot(t1, d1, 'b*-', 'LineWidth', 2, 'MarkerSize', 3);
end