关于MATLAB读取txt文件的方法[通俗易懂]

关于MATLAB读取txt文件的方法[通俗易懂]关于MATLAB读取txt文件的方法一、如何读取一个文档下,多个txt文件?一般读取的文件,命名都具有一定的规律,除去相同部分,剩下的变化按照时间、序号、某一特定的标志符等进行排列。下面我们举个例子来操作。假如文件夹里存在以下文件:cs20170701cs20170702cs20170703cs20170704…cs20170731标签:cs代表产品类型,数字代表年月日。总共…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

iLoveMATLAB论坛最常见的问题Top200

关于MATLAB读取txt文件的方法

一、如何读取一个文档下,多个txt文件?
一般读取的文件,命名都具有一定的规律,除去相同部分,剩下的变化按照时间、序号、某一特定的标志符等进行排列。
下面我们举个例子来操作。

假如文件夹里存在以下文件:
cs20170701
cs20170702
cs20170703
cs20170704

cs20170731

标签:cs代表产品类型,数字代表年月日。总共31个文件
意义:整个生产部门在2017年7月份的生产记录表
分析内容:首先我们观察所有的文件,它们具有相同部分:产品类型和年月,变化的部分只有日子数,那么,我们就可以使用一个循环来读取所有的txt文件,且保存得有规律。
参考函数:loadtextread num2str
解决方案:

data=cell(1,31);%创建一个储存空间
for num=1:9
        if num<10
                data{ 
   num}=textread(['cs2017070' num2str(num) '.txt']);%将每日的数据分别存在一个cell空间内
        else
                data{ 
   num}=textread(['cs201707' num2str(num) '.txt']);
        end
end

二、一个txt文件里全是数字数据的读取?

例如sq.txt文件内容为:
1 20.1 574 21
2 7541 12 24
3 45 21 45
4 32 12 54.2.
5 35.1 45.0 45.0

标签:数字1为编号,数字2、3、4,分别为长、宽、高
分析内容:这是最典型的纯数字文件,我们仅需读取数字就行了。
参考函数:load

解决方案:

load sq.txt

三、在问题二的基础上存在第一行数据为中文?

例如sq2.txt文件内容为:
编号 长 宽 高
1 20.1 574 21
2 7541 12 24
3 45 21 45
4 32 12 54.2
5 35.1 45.0 45.0

标签:同问题2
分析内容:这里的文件内容,存在了一行中文汉字,load函数将不再适用,这里我们需要分为两个部分处理:1、中文处理;2、数字处理。
参考函数:textread importdata

解决方案:
%方案一

data=textread('sq2.txt','%s');%读取文件
data=str2num(char(data(5:end)));%删除中文,并将cell转换成数字
data=reshape(data,4,length(data)/4)';%重新按照格式排列

%方案二

data=importdata('sq2.txt');%读取的文字存在struct内,data为数字,textdata为中文
data=data.data;%提取struct中的data

四、读取中文与数字混合文件?

一般此种文件格式为: 中文1:xxx, 中文2:xxx, 中文3:xxx,

例如sq3.txt文件内容为:
编号:1 长:20.1 宽:574 高:21
编号:2 长:7541 宽:12 高:24
编号:3 长:45 宽:、21 高:45
编号:4 长:32 宽:12 高:54.2
编号:5 长:35.1 宽:45.0 高:45.0

标签:
分析内容:这种固定的汉字和变化的数字,以形成汉字和数字混合出现,已经不能简单应用MATLAB自带函数处理,需要根据实际情况进行更加精准的处理。这里使用文件系统函数(fopen等函数)读取文件(与C语言读取文本相同),这方面的文件或经验,百度搜索有一大堆,我只分享一下它的最关键部分。
关键函数:
fopen 打开文件,返回地址,因为我们只是读取文件,所以用r权限
fscanf 以某种方式读取文件,具体内容具体分析
fscanf(FID,FORMAT,SIZEA) 其中:FID为文件地址(为fopen的返回值),FORMAT为读取txt文件的格式,SIZEA为读取的函数,如:[1 inf] 读取从第一行到最后一行
fclose 关闭文件
注意:这里的三个函数缺一不可(养成良好习惯,打开的文件要关闭)

解决方案:

fid=fopen('sq3.txt','r');%只读
data=fscanf(fid,'编号:%d 长:%f 宽:%f 高:%f\n',[1 inf]);%按照读取文件的标准格式来写
fclose(fid);%关闭
data=reshape(data,4,length(data)/4)';%重新按照格式排列

五、文件内容存在缺损(1)
在某些产品检测时,得到的数据可能存在缺损值,即某个标签下的值不存在。

例如sq4.txt文件内容为:
123.1,754,124,12,57
13,754.5,124,12,57.7
23,754,124.2,12,
12,754,12,57.8
13,754,12.4,12,57
12.5,754,124,12,57.6

标签:每行总共5个数字,分别代表5个属性,分别用逗号隔开。但是因为某些原因,存在缺损值,缺损值也是有逗号隔开了的。第三行缺第5个值,第四行缺第3个值
分析内容:这种缺损值,只是简单的数字值缺损,结构简单,缺损值少。
关键函数:importdata

解决方案:

data=importdata('sq4.txt');%缺损的值将用NaN补全

六、文件内容存在缺损(2)

较之问题五,问题六的数据成分更加复杂。

例如sq4.txt文件内容为:
10:21:54,123.1,754,124,57,10/24,a
10:21:56,13,754.5,124,12,57.7,21/54,b
10:21:58,23,754,124.2,12,20/64,
10:21:59,12,754,12,57.8,21/24,a
10:22:01,13,754,12.4,12,57,
10:22:02,12.5,754,124,12,57.6,22/54,b

标签:总共存在8个属性,分别逗号隔开,属性1为时间 例如:10:21:54 10点21分54秒
分析内容:这是一组成分复杂且带有缺损值的文件,每组数据具有一定规律但又存在差异,这种情况也是MATLAB自带函数所不能轻易解决的,且若使用文件系统函数,也将变得非常繁琐,这里将使用另一种方式:正则表达式。百度’正则表达式’,其它地方也有很多的学习资料,但是大多数地方都存在一个特点:讲解得很全面。伴随之存在着缺点:内容繁多而且复杂,且我们没必要了解这么多。这里我就针对读取txt文件,只介绍我们需要的关键东西。
关键函数:regexp
x=regexp(str1,str2); 其中str1表示原字符串,str2表示分割标志符,x表示匹配到的位置

解决方案:
我们先分析一组数据
10:21:54,123.1,754,124,57,10/24,a
数据格式: 数据1,数据2,数据3,数据4,数据5,数据6,数据7,数据8
分析得知每个数据以逗号隔开,数据内容不限也可能为空,我们就可以以逗号为分割符将数据拆分开,如果相邻逗号位置相减为1,则该数据为空。

clear;
clc;
data1=textread('cs20170704.txt','%s');%读取出所有的内容
num=8;%总共8个数据
data=cell(length(data1),num);%创建最后的存储空间
str=',';%分割标志符
for n=1:length(data1)
    addr=regexp(data1(n),str);%找到所有逗号位置
    addr=cell2mat(addr);%regexp返回值为cell类型,此变为mat
    data{ 
   n,1}=data1{ 
   n}(1:addr(1)-1);%数据1 时间不存在缺损,单独提出来
    for m=2:num-1%数据2-7
        if addr(m)-addr(m-1)==1%相邻逗号相减为1
            data{ 
   n,m}=NaN;%else
            data{ 
   n,m}=data1{ 
   n}(addr(m-1)+1:addr(m)-1);%数据非空 (前面逗号-1)到(后面逗号+1)
        end
    end
    if addr(7)==length(data1{ 
   n})%数据8 最后一个数据单独提出来
        data{ 
   n,8}=NaN;%else
        data{ 
   n,8}=data1{ 
   n}(addr(7)+1:end);%数据非空
    end
end
data
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196708.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android的surfaceflinger原理学习「建议收藏」

    android的surfaceflinger原理学习「建议收藏」概念SurfaceFlinger是一个系统服务,如:audioflinger,audiopolicyservice等等,系统的主要服务通过这个文章进行了解,Android的系统服务一览。这个系统服务主要实现了Surface的建立、控制、管理等功能。换种说法就是,在Android的实现中它是一个service,提供系统范围内的surfacecomposer功能,它能够将各种应用程序的2D、3…

  • CentOS7增加或修改SSH端口号

    CentOS7增加或修改SSH端口号

    2021年10月18日
  • 影像传感器尺寸换算(英寸-毫米)

    影像传感器尺寸换算(英寸-毫米)CCD尺寸的说法是参考传统摄像机内的真空摄像管的对角线长短来衡量的,它严格遵守了OpticalFormat规范,中文译名为光学格式,其数值称为OF值,单位为英寸。因此CCD尺寸的标准OF值计算方法是其实际对角线长度(单位:16mm)也就是说数码相机里的一英寸长度不是工业上的25.4mm,是16mm!!以1/1.8英寸的CCD作例,这个1/1.8英寸就是计算公式中的OF值,16÷1.8≈8….

  • Authentication failure. Retrying – 彻底解决vagrant up时警告

    Authentication failure. Retrying – 彻底解决vagrant up时警告

  • .NET NPOI导出Excel详解[通俗易懂]

    .NET NPOI导出Excel详解[通俗易懂]NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件。支持的文件格式包括xls,doc,ppt等。官方网站:http://npoi.codeplex.com/nuget直接获取使用一、NPOI生成Excel//创建…

  • Spring AOP 实现监控方法执行的时间(统计service中方法执行的时间)

    项目中有时候会遇到统计方法执行的时间,来对项目进行优化!下面是我自己在工作中遇到的问题,和我自己的解决方法。要统计出项目中方法执行时间大于1秒的那些方法!我们的项目开发使用的是SpringMVC 那么首先想到使用 Aop Aspet 切面统计,那样子更加方便也高效。1:打开切面!因为项目使用的SpringMVC,项目中的配置文件就配置的 &lt;aop:aspectj-autoproxy …

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号