【问题标题】:Read data to matlab with for loop用for循环读取数据到matlab
【发布时间】:2016-05-08 04:18:49
【问题描述】:

我想在某些变量中将大小约为 60 MB 的文件的数据读入 matlab,但出现错误。这是我的代码:

    clear all ;
    clc ;
    % Reading Input File
    Dataz = importdata('leak0.lis');
    %Dataz = load('leak0.lis');

    for k = 1:1370
foundPosition = 1 ;
for i=1:size(Dataz,1)
    strp = sprintf('I%dz=',k);
    fprintf(strp);
    findValue = strfind(Dataz{i}, strp) ;
    if ~isempty(findValue)
        eval_param = strp + '(foundPosition) = sscanf(Dataz{i},''%*c%*c%*f%*c%*c%f'') ;';
        disp(eval_param);
        % str(foundPosition) = sscanf(Dataz{i},'%*c%*c%*f%*c%*c%f') ;
        eval(eval_param);
        foundPosition = foundPosition + 1 ;
    end
end
end

当我调试它时,我发现 dataz 是空的,所以它不会进入下一行。我用 fopen、load & 等替换了它,但是没有用。

【问题讨论】:

  • 文件内容的格式是什么?
  • 这是文件的 sn-p:*** monte carlo index = 1 *** i1z= -17.3439n i2z= -24.7754p
  • K 上没有 for 循环,我在 matlab 工作空间中得到了数据。我的意思是如果我对每个 k 都这样做,但问题是当我编写以下代码的 1370 次时,matlab 程序进入忙碌状态几个小时并且没有回答:foundPosition = 1;对于 i=1:size(Data,1) findValue = strfind(Data{i}, 'i11p=') ; if ~isempty(findValue) i11p(foundPosition) = sscanf(Data{i},'%*c%*c%*f%*c%*c%f') ;发现位置 = 发现位置 + 1 ;结束结束
  • 所以导入数据适用于此,但是当数据很大时,不起作用

标签: matlab for-loop


【解决方案1】:

From the Matlab help files,导入数据可能会失败,因为它不理解您的文件格式。
来自帮助文件

要导入的文件的名称和扩展名,指定为字符串。如果 importdata 识别出文件扩展名,它会调用 MATLAB 帮助函数,该函数旨在导入关联的文件格式(例如 MAT 文件的 load 或电子表格的 xlsread)。否则,importdata 会将文件解释为分隔的 ASCII 文件。

对于 ASCII 文件和电子表格,importdata 期望找到数字 矩形形式的数据(即像矩阵一样)。文本标题可以 出现在数值数据的上方或左侧,如下所示:

假设您的 .lis 文件实际上有分隔文本。 您应该调整 importdata 调用中的分隔符,以便 Matlab 可以理解您的文件。

filename = 'myfile01.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多