使用循环读取超过3000个txt文件

时间:2014-08-20 10:09:32

标签: matlab

我有超过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中执行类似的操作。非常感谢帮助。我将感激你。

1 个答案:

答案 0 :(得分:1)

我不确定您遇到的问题是什么,但我在您的代码中发现了一些错误。 fopen会返回一个文件ID,然后您应该将此文件ID传递到textscanfclose,而不是文件名。 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