异常Textscan读取

时间:2019-04-30 16:59:10

标签: matlab textscan

  1. 我正在编写一个程序,该程序将读取一个文件,其中包含笛卡尔点,大小和方位。该系统以348x348阵列的形式表示风暴的运动。
  2. 我正在读取的文件包含以下格式的数据:X1,X2,Y1,Y2,RHO,THETA 在文件的第一行上对此进行了注释。数据量可能因文件而异,因此它不是固定数字。该文件是从外部准备的,前四个参数用于生成后两个参数。我已经用编写的代码读取了数百个文件,过去我没有遇到任何问题,但是我得到的数据在后两列中已经减少了一些数字,因此我想读取文件并生成最后一个两列。我可以照顾数学,但是我的问题是textscan函数跳过了数字,即使有数据也是如此。因此,我的行未对齐,因此,当我尝试计算最后两列时,程序崩溃并烧毁。 我需要做两件事的帮助:1.读取每一行,并在正确的列中获取所有数据。如果第5列或第6列中没有数据,请输入NaN。有时没有数据,但是有一个“-”。我可以稍后在程序中计算这些列的值,然后还原数据文件。
  3. 如果第1-4列中没有数据,请在读取的数据中删除整行(不在数据文件中),但在将数据分配给的变量中删除。 我正在研究我的论文,由于我无法信任这些文件中的数据,因此我需要解决此问题。

  4. 我已经尝试了多种方法来纠正此问题。我检查了数据文件,看其中是否有一些奇怪的字符。我还在textscan调用语句中交替使用了不同的命令,但是我将绕圈而行。这可能很简单,而我却忽略了一些显而易见的事情。我将粘贴已运行的例程,但由于未知原因它仍会跳过数字。我将包含一个包含10行的数据文件(1条评论+9条数据)。 我正在使用大多数工具箱运行Windows版本10,MATLAB R2017b学生版。

  5. 这是代码:     读取点文件的%dotsread.m文件     filename ='dots0102.txt';%data文件

    FileID = fopen(filename, 'r');%open file
    %    
    formatSpec = '%f%f%f%f%f%f';%data format
    Avec = textscan(FileID, formatSpec,...
        'Delimiter', ',','HeaderLines',1,'EmptyValue',...
        NaN,'CommentStyle',{'-'}  ); %assign data to Avec  
    
    fclose(FileID); %close file
    %Assign data to variables
    starpx = Avec{1};
    starpy = Avec{2};
    stoppx = Avec{3};
    stoppy = Avec{4};
    rho = Avec{5};
    theta = Avec{6};
    
  6. 如果数据文件中的所有列均已填写并且有N行,那么我希望每个分配的变量都具有N行。

    starpx = Avec {1};%Nx1,两倍 starpy = Avec {2};%Nx1,加倍 stoppx = Avec {3};%Nx1,加倍 stoppy = Avec {4};%Nx1,加倍 rho = Avec {5};%Nx1,加倍 theta = Avec {6};%Nx1,两倍

  7. 实际结果

    starpx = Avec {1};%Nx1,两倍 starpy = Avec {2};%Nx1,加倍 stoppx = Avec {3};%Nx1,加倍 stoppy = Avec {4};%Nx1,加倍 rho = Avec {5};%(N-1)x1,两倍 theta = Avec {6};%(N-1)x1,两倍

  8. 数据已移动但出乎意料。 如果代码有任何公然错误,请通知我。我可以向您发送10行数据文件,以便您了解发生了什么。 谢谢

0 个答案:

没有答案