美文网首页
MATLAB(三)数据类型与文件读写

MATLAB(三)数据类型与文件读写

作者: 飞向深空 | 来源:发表于2020-03-17 16:40 被阅读0次

    基础知识:https://blog.csdn.net/ncepu_Chen/article/details/103065580


    数据类型:
    true,false
    char
    numerric:int8,uint8,single,double,int16,uint16,int32,uint32,int64,uint64
    cell
    struct
    function


    class(变量),可以查看数据类型,不声明变量类型那么就是默认double类

    标准的ASCII字符可以被转换为对应的ASCII码
    s1 = 'h';
    uint16(s1) %得到104

    字符串还是单引号,如'hello'
    str1 = 'hellol';
    str2 = 'hh';

    size(str1) %得到[1,6],即1行6列
    str1(1) %'h',索引从1开始
    str3 = [str1 str2]; %'hellolhh'

    'l'==str1; %得到一个logical数组,是'l'地方是1 ,[001121]
    seiz(str3); %[1 8]
    替换:str(str=='l') = 'Z'; %'heZZoZ'


    结构体:存储是{键:值},使用 . 来访问结构体中字段
    MAT中结构体直接开始写,不是C的先声明
    st.name = 'tom';
    st.id = '123';
    st.sex = '男';
    st.grade = [100,75,85,...
    56,85,88,....
    100,52];
    st %结构体打印

    上面默认是str(1)结构体
    也可以写str(2).name = 'se';
    此时
    命令行 str 得到是键,没有具体数值。而且str(2)另外添加的键也会在str(1)中显示,只是个空的矩阵

    s = setfield(s,'field',value);把结构体s中fileld的值变化成value
    如果是setfield(s,'field',value);不会改变


    importdata函数

    importdata函数主要特点是可以从文本文件中导入数据
    导入的数据可以是类似于表格形式的,可以含有表头即列名称,也可以不含表头。
    表头可以是文本形式的。
    除了官方文档说明的这些我发现,importdata导入的数据除了可以列名外还可以含有行名。导入时列名会被放在colheaders数组中,行名会被放在rowheaders数组中。
    importdata还可以用来导入图片,传入图片的名称即可,前提是图片在工作路径里
    importdata函数会将数据导入到一个结构体变量中,文本与数字分别导入到结构不同的属性中。
    数字部分导入到属性data中是一个矩阵,文本部分导入属性textdata中是一个细胞数组。
    如果textdata中的文本是列名则同时还会保存到属性colheaders中,是行名会保存到rowheaders中

    当有超过两行文字标题时,前面行当作一个字符串,最后一行是列标题存入colheaders(Demo3)

    当最后一列是文字时,每行作为一个字符串(Demo5
    A = importdata('-pastespecial')

    load函数
    load函数一般将用来导入纯数字的文件,可以是文本格式的文件或者是matlab保存的mat格式的文件。
    load 文件名 ,即可引入文件
    save 文件名;保存当前所有变量
    save 文件名 A;保存变量A到文件
    save 文件名 -ascill 以ascii码形式保存

    fopen(文件名,方式)
    'r' 打开文件进行读取。
    'w' 打开或创建新文件进行写入。 丢弃现有内容(如果有)。
    'a' 打开或创建新文件进行写入。 将数据追加到文件末尾。
    'r +' 打开文件进行读写。
    'w +' 打开或创建用于读取和写入的新文件。 丢弃现有内容(如果有)。
    'a +' 打开或创建用于读取和写入的新文件。 将数据追加到文件末尾。
    'A' 打开文件进行追加,而不会自动刷新当前输出缓冲区。
    'W' 打开文件进行写入,而不会自动刷新当前输出缓冲区。

    fprintf(fileID,formatSpec,A1,...,An)
    按列顺序将 formatSpec 应用于数组 A1,...An 的所有元素,并将数据写入到一个文本文件。fprintf 使用在对 fopen 的调用中指定的编码方案。
    type 文件名,查看文件内容
    fileID:将要写入的文件
    formatSpec:写入的格式
    A1。。。An是数组

    fprintf(formatSpec,A1,...,An) 直接显示结果

    使用fprintf需要先fopen打开文件
    A1 = [9.9, 9900];
    A2 = [8.8, 7.7 ;...
    8800, 7700;...
    8.5, 9.8];
    formatSpec = 'X is %4.2f meters or %8.3f mm\n';
    fprintf(formatSpec,A1,A2)

    X is 9.90 meters or 9900.000 mm
    X is 8.50 meters or 7.700 mm
    X is 7700.00 meters or 9.800 mm
    这里写出了A1和A2按此格式写出的样子
    格式在数组里取值是按列来的
    A1:[9.9 9900] 取值方式:一列一列来,9.9取到放到%4.2f,然后往下看发现没有了,就到第2列,把9900放到%8.3f
    A2:
    [8.8 7.7 ]
    [8800 7700]
    [8.5 9.8 ]
    取值方式:一列一列来,8.8到4.2f,8800到8.3f,8.5到4.3f,第一列读完,到第2列,7.7到8.3f,7700到4.3f,9.8到8.3f

    A = fscanf(fileID, format)
    A = fscanf(fileID, format, sizeA)
    [A, count] = fscanf(...)
    A 是接受数据的矩阵。count为元素个数
    需要先fopen打开文件,文件打开不用fclose关闭,自此期间读出来的数据将不会再被读,举个例子就是指针指到了上次最后一个读出数据的后面第一数,再读就从这个数往后匹配然后读出。如果fclose掉文件中心fopen开,就可以读已经读出的部分
    现主要讲解主要用到的第二种形式:

    A = fscanf(fileID, format, sizeA)

    • A 是你从打开的文件中读入数据最后存储的一个矩阵 叫做A
    • fileID是从前提函数中返回的结果,代表你要打开的文件是否已经正常打开,其原型为 fid = fopen(fileName, 'r');返回值要么为0 要么为 1 logical value
    • format 就是数据的格式 比如: %d 就是十进制
    • sizeA 这个表示A最终的维数 ,比如[3,3]代表A最终是3x3的矩阵,从原始文件中读的时候是按行读,写入A中时按列优先。直到满足sizeA所表示的维数,其余的丢弃不要。

    mydata.txt:
    1 2 3
    4 5 6
    4 5 6
    7 8 9

    fileID = fopen('mydata.txt','w');
    A = fscanf(fileID, '%d', [3,3]);
    %结果:横着读。竖着写
    A =
    1 4 4
    2 5 5
    3 6 6

    相关文章

      网友评论

          本文标题:MATLAB(三)数据类型与文件读写

          本文链接:https://www.haomeiwen.com/subject/xkixehtx.html