• matlab中textread


    今天打算跑下程序,突然发现,真的很烂,不会读入数据,简单的Iris.txt一上午都没读进去,在此对matlab中的textread函数做下总结,textscan函数待续。

    本文主要内容引自http://linux.chinaitlab.com/administer/872894.html

    笔者在此基础上进行运行,修改得到以下内容,希望大家给与补充:

    textread

    基本语法是:

        [A,B,C,…] = textread(filename,format)

        [A,B,C,…] = textread(filename,format,N)
    其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
    必须严格遵守用法不可出现data=textread(filename,format,N)的形式

    其中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,…] = textread(filename,format,N)的语法,读取N次。
    _______________________________________________________________________________________

    注:textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。

    ________________________________________________________________________________________

    例如:
    .....................................................................................
    例1:无分隔符
    mytest.txt
     1     2     3     4
     5     6     7     8
     9    10    11    12

    读取:
    >>[data1,data2,data3,data4]=textread('mytest.txt','%n%n%n%n');
    >>data=[data1 data2 data3 data4]
    data =

         1     2     3     4
         5     6     7     8
         9    10    11    12
    或者,[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);%注意3为读取次数,应该是行数
    ....................................................................................

    例2:有分隔符(逗号,分号...)
    myfile.txt 中的内容如下:

        1, 2, 3, 4

        5, 6, 7, 8

        9, 10, 11, 12

    读取:
    >> [data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n','delimiter', ',')
    >> data=[data1 data2 data3 data4]

    data =

         1     2     3     4
         5     6     7     8
         9    10    11    12
    这里delimiter是指 指出分隔符,读数据的时候会自动跳过分隔符。

    至此应该知道Iris.txt怎么读入了吧。
    [data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');

    需要注意的是,参数位置要和textread函数用法对应
    [A,B,C,…] = textread(filename,format,N)也就是filename,format,N三个参数必须在其他参数前面,所以150才会出现在format后
    例如:[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s',150,'delimiter',',');
    ..............................................................................

    例3:有分隔符及首行注释
    myfiles.txt 中的内容如下:

        % this a comment

        1, 2, 3, 4

        5, 6, 7, 8

        9, 10, 11, 12

    >> [data1,data2,data3,data4]=textread('myfiles.txt','%n%n%n%n','delimiter', ',','headerlines', 1);
    >>  data=[data1 data2 data3 data4]

    data =

         1     2     3     4
         5     6     7     8
         9    10    11    12
    textread中的headerlines指明了跳过几行,1可自由设定
    这里headerlines告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
    ..............................................................................

    例4:针对txt文件不同格式数据的读取

    myfile.txt 中的内容如下:

        Sally Level1 12.34 45 Yes

    读入:
    [names, types, x, y, answer] = textread('myfileli4.txt' , '%s %s %f %d %s', 1);

    对应格式[A,B,C,…] = textread(filename,format,N)
    _________________________________________________________________________________

       例4.1: 如果要忽略12.34这个浮点数。

        [names, types, y, answer] = textread('myfileli4.txt' , '%s %s %*f %d %s', 1)

        %*f 告诉textread跳过一个浮点数。
    names =

        'Sally'


    types =

        'Level1'


    y =

        45


    answer =

        'Yes'

    对于iris.txt如果只想读取数据可用[data1,data2,data3,data4]=textread('Iris.txt','%f %f %f %f %*s',150,'delimiter',',');
    ____________________________________________________________________________________________

     例:4.2  如果要忽略Level,指读取后面的数字,

     >> [names, levelnum, x, y, answer] = textread('myfileli4.txt','%s Level%d %f %d %s', 1)

    names =

        'Sally'


    levelnum =

         1


    x =

       12.3400


    y =

        45


    answer =

        'Yes'
    ________________________________________________________________________________________________
    ..............................................................OK ...............................................
    例5: txt中存在空位

    myfileli5.txt 中的内容如下
        1,2,3,4,,6

        7,8,9,,11,12

        想用nan替代为空的部分

    如下:
    >>[data1 data2 data3 data4 data5 data6] = textread('myfileli5.txt','%f%f%f%f%f%f', 'delimiter', ',', 'emptyvalue', NaN)

    >> data=[data1 data2 data3 data4 data5 data6];
    >> data

    data =

         1     2     3     4   NaN     6
         7     8     9   NaN    11    12

    ....................................................................................................................

    例6: 跳列

    myfileli6.txt 中的内容如下

        Sally Type1 12.34 45 Yes

        Joe Type2 23.54 60 No

        Bill Type1 34.90 12 No

    如果只想读第一列,其余的跳过

    读入:
    >> clear
    >> [names]=textread('myfileli6.txt','%s%*[^ ]');
    >> names

    names =

        'Sally'
        'Joe'
        'Bill'

    %[^ ] 就是一直读到行尾。
    如:
    >> [names rest]=textread('myfileli6.txt','%s%[^ ]')

    names =

        'Sally'
        'Joe'
        'Bill'


    rest =

        'Type1 12.34 45 Yes'
        'Type2 23.54 60 No'
        'Type1 34.90 12 No'

    %*[^ ] 就是从当前直接跳到行尾。
    % *是一个跳过符号,表示跳过该位

    ....................................................................................

    例7:读入规律格式的数据

    myfileli7.txt 中的内容如下
     
        Location;date;discharge
     
        Lobith;1989-01-01;00:00;2801
     
        Lobith;1989-01-02;00:00;2619

    读入:
    [location year month day hour minute discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';');

    如下:
    >> clear
    >> [location year month day hour minute discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';')

    location =

        'Lobith'
        'Lobith'


    year =

            1989
            1989


    month =

         1
         1


    day =

         1
         2


    hour =

         0
         0


    minute =

         0
         0


    discharge =

            2801
            2619

  • 相关阅读:
    HDU1813:Escape from Tetris(IDA)
    开发汉澳sinox64位,对接汉澳矩阵电脑
    新博客有了,文章转移到 http://www.iosxxx.com/
    Linux内核之于红黑树and AVL树
    MySQL用户及数据安全专题
    实现Android操作系统11种传感器介绍
    NSSCanner 提取 指定 字符串
    [置顶] 正则表达式应用:匹配IP地址
    某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
    JSTL解析——003——core标签库02
  • 原文地址:https://www.cnblogs.com/AI-Algorithms/p/3670271.html
Copyright © 2020-2023  润新知