数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据

2023-11-03

目标

分多个数组提取下图文本中的数据

在这里插入图片描述

在这里插入图片描述

介绍

     之前介绍了在txt文本中,内容是以列规整的情况下,可以参考:数据处理技巧(5):MATLAB 读取txt中的数据.上次介绍的主要是处理以下两图,按列排列的情况。
在这里插入图片描述在这里插入图片描述
这一次处理是数据比较复杂,直接看本文,每一列不是那么整齐。主要处理三种情况:纯数字、字符+数字、字符+数字+字符+数字的情况。

① 纯数字的情况

需要读取的文本文件:

在这里插入图片描述

判断文件路径

     判断输入的文本文件路径是否正确,如果输入了一个错误的文件名,会提示“错误信心+文件打开失败。”的提示。
在这里插入图片描述在这里插入图片描述
     输入了正确的文件路径之后,读取数据结束,会出现“成功读取文件数据”的提示。
在这里插入图片描述
在这里插入图片描述

matlab 读取数据的结果

     打开工作区的 mdata, 双击 mdata 的 data 变量,可以看到读取的纯数字的数据。
在这里插入图片描述
在这里插入图片描述
     由于matlab 的表格默认显示4位小数,所以看起来不同。实际上 matlab 计算不只显示的4位小数,是可以正常计算的。
在这里插入图片描述

代码块

%% purenum

% 创建data数组
mdata.data = [];

FileLoc = "purenum.txt";   % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r");    % 打开文本文件,只读模式打开

if datafid==-1
   % 成功打开,返回非负数;打开失败返回-1
    disp(datamess);
    disp("文件打开失败。");
else
    tline = fgets(datafid);     % 先读取第一行
    while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
        data123 = sscanf(tline,'%f',3);   % 找到点坐标(序号,x,y,z),记得转置
        mdata.data=[mdata.data;data123'];  % 存储在数组
        tline = fgets(datafid);     % 迭代,读下一行
    end
    fclose(datafid);   % 关闭文件
    disp("成功读取文件数据。");  % 提示
end

② 文字开头,数字在后的情况

需要读取的文本文件

在这里插入图片描述

matlab 读取数据的结果

在这里插入图片描述

代码块

%% charnum
% 创建三个数组
mdata.VArray = [];
mdata.rgb = [];
mdata.point = [];

FileLoc = "charnum2.txt";   % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r");    % 打开文本文件,只读模式打开

if datafid==-1
   % 成功打开,返回非负数;打开失败返回-1
    disp(datamess);
    disp("文件打开失败。");
else
    tline = fgets(datafid);     % 先读取第一行
    while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
        % 判断行开头的第一个单词
        [ln,~,~,n] = sscanf(tline,'%s',1);  % 处理这一行的数据
        if ln=="Vertex"
            tline1=tline(n:end);    % 截断-删除Vertex
            Vxyz = sscanf(tline1,'%f',3);   % 找到点坐标(序号,x,y,z),记得转置
            mdata.VArray=[mdata.VArray;Vxyz'];  % 存储在数组
        end
    
        if ln=="rgb"
            tline1=tline(n:end);    % 截断-删除Vertex
            Vxyz = sscanf(tline1,'%f',3);   % 找到点坐标(序号,x,y,z),记得转置
            mdata.rgb=[mdata.rgb;Vxyz'];  % 存储在数组
        end
    
        if ln=="point"
            tline1=tline(n:end);    % 截断-删除Vertex
            Vxyz = sscanf(tline1,'%f',3);   % 找到点坐标(序号,x,y,z),记得转置
            mdata.point=[mdata.point;Vxyz'];  % 存储在数组
        end
        tline = fgets(datafid);     % 迭代
    end
    fclose(datafid);   % 关闭文件
    disp("成功读取文件数据。");  % 提示
end

③ 一行文字和数字混杂的情况

需要读取的文件:

在这里插入图片描述

matlab 读取数据结果:

在这里插入图片描述

代码块

%% charnumcharnum
% 创建三个数组
mdata.VArray = [];
mdata.rgb = [];
mdata.point = [];

FileLoc = "charnumcharnum.txt";   % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r");    % 打开文本文件,只读模式打开

if datafid==-1
   % 成功打开,返回非负数;打开失败返回-1
    disp(datamess);
    disp("文件打开失败。");
else
    tline = fgets(datafid);     % 先读取第一行
    while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
        % 判断行开头的第一个单词
        [ln,~,~,n] = sscanf(tline,'%s',1);  % 处理这一行的数据
        if ln=="Vertex"
            tline1=tline(n:end);    % 截断-删除Vertex
            Vxyz = sscanf(tline1,'%f',3);   % 找到点坐标(序号,x,y,z),记得转置
            mdata.VArray=[mdata.VArray;Vxyz'];  % 存储在数组
            % 找 rgb 
            k1 = strfind(tline, 'rgb');
            if k1>0
                k1=k1+3; % 找到删去rgb的最后位置
                tline1=tline(k1:end);
                rgb = sscanf(tline1,'%f',3);   % 找到 rgb
                mdata.rgb=[mdata.rgb;rgb'];  % 存储在数组里
            end
            % 找 point 
            k2 = strfind(tline, 'point');
            if k2>0
                k2=k2+5; % 找到删去 point 的最后位置
                tline2=tline(k2:end);
                point = sscanf(tline2,'%f',3);   % 找到 point
                mdata.point=[mdata.point;point'];  % 存储在数组里
            end
        end
        tline = fgets(datafid);     % 迭代
    end
    fclose(datafid);   % 关闭文件
    disp("成功读取文件数据。");  % 提示
end

结尾

     通过这次介绍,可以很快速地用 matlab 提取文本文件中的数据,以备后续 matlab 处理。 结合 数据处理技巧(5):MATLAB 读取txt中的数据 应该能解决很多读取数据的问题啦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据 的相关文章

  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 将向量(或弧)绘制到玫瑰图上。 MATLAB

    我有两个数据集 其中详细列出了angles 我正在绘制玫瑰图 angles 0 8481065519 0 0367932161 2 6273740453 n 另一个 从这组角度详细说明方向统计 angle error 0 848106563
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e

随机推荐

  • linux网络编程(一)

    1 linux的网络模型 linux使用的网络模型是TCP UP四层网络模型 主要由应用程序 传输层 网络层 网络接口层组成 与OSI七层模型不同 但是又相互对应 它们之间关系如下图 OSI模型的应用层 表示层 会话层对应着TCP IP模型
  • Android中Application的onCreate多次调用问题

    http blog csdn net peidonghui article details 46043943 版权声明 本文为博主原创文章 未经博主允许不得转载 1 问题描述 一个Android应用需要为一个service单独开一个进程以完
  • 设置cin不忽略空格

    cin读取字符是会忽略空格和换行的 可以用noskipws设为不跳过空格或者换行 char step cin gt gt noskipws gt gt step
  • ERROR 1045(28000):Access denied for user ‘root‘@‘local‘(using password:yes)问题解决

    首先出现这种问题一般是密码错误 但是也有可能 输入密码正确也显示报错的情况 笔者刚在Xshell中安装mysql 第二天输入了正确密码 我保证我输入的是正确的 出现此类报错 解决方法一般是重置密码 1 跳过MYSQL的密码验证过程 在Xsh
  • 蓝桥杯单片机学习过程记录(二十八)第五届国赛串口通信相关代码补充

    蓝桥杯单片机学习过程记录 二十八 第五届国赛串口通信相关代码补充 UART串口通信 第五届国赛uart串口内容相关补充 设置数组存储输入输入字符 并与设定的密码相判断 include
  • springboot2+shiro+redis限制同一账号同时在线人数

    springboot2 shiro redis限制同一账号同时在线人数 我们在写系统的时候 需要注意账号安全问题 最好的处理方法就是同一个账号只能在一个地方登录 原理 大概的原理就是每次登录的时候将登录的sessionId存入缓存 然后登录
  • c# 二维码生成

    dll下载 https pan baidu com s 1MDQalDEoV4iDXRYsEzDXtw 生成图片 此dll适合Framework版本较多 Imports ThoughtWorks QRCode Codec Dim qrCod
  • 技术人修炼之道阅读笔记(七)系统性思维方法

    在工作中有两种高手 一种是他们有成体系的逻辑 术法清晰 另一种是他们悟性高 对大多数人来说 前一种可借鉴性更高 但前提是要足够努力和坚持 塑造系统性思维并进行验证和升级 一 什么是系统性思维 系统性思维 是把物质系统当作一个整体进行思考的思
  • matlab 中num2str函数的使用

    参考 https zhidao baidu com question 431413920 html 问题描述 先前使用num2str函数只是使用了该函数最常用的功能 将数字转换为字符串 但其实该函数还有额外格式上的功能 今天使用图像批处理的
  • vue中使用echarts词云

    1 安装 cnpm install echarts wordcloud 2 创建模板组件 WordCloudChart
  • 自制Jlink OB

    简言 bin 2020 for 6 6 bin 适用最新版的Jlink驱动 6 6x版本号 关于修改SN 打开Jlink Commander 输入exec setsn xxxxxxxx即可修改成功 依据网上的资源 做了一些修改 将原来的输出
  • 快速排序及三种排序方法 Hoare法/挖坑法/前后指针法

    快速排序 算法思想 基于分治的思想 是冒泡排序的改进型 同冒泡排序一样 快速排序也属于交换排序 通过元素之间的比较和交换位置来达到排序的目的 不同的是 冒泡排序在每一轮只把一个元素冒泡到数列的一端 而快速排序在每一轮挑选一个基准元素 并让其
  • 高性能的Web网关,一个工具等于 Nginx + Https证书 + 内网穿透 + 图片切割水印 + 网关登录...

    一 开源项目简介 Apiumc Gateway 它一个工具等于 Nginx Https证书 内网穿透 图片切割水印 网关登录 Apiumc Gateway 是高性能的Web网关 它从底层Socket原始通信层开始 采用多线程 多任务模式从新
  • HyperMesh 2D网格划分

    Hypermesh具有很强的二维四边形网格划分能力 核心思想是将二维几何模型划分为一个个四边形区域 然后在四边形区域内进行进一步的网格划分 常用工具是Geom gt quick edit和2D gt automesh 下面举例看一下 1 常
  • 图文并茂使用CocosBuilder制作Cocos2D游戏 分享0

    图文并茂使用CocosBuilder制作Cocos2D游戏 分享 0 目 录 The Game 设置工程 创建动画类型的主界面 本文由Zynga 工程师原创 翻译 Iven 张作宸 Butterfly 手把手教你使用CocosBuilder
  • 广东公需科目公需课十四五答案考试查询器

    QQ录屏20200723111627 效果看上面这个视频 其中需要data pkl文件 这上面无法上传 如果的可以联系我发给你 博客头像边上有我wx号 import pickle file open data pkl rb data pic
  • 010 - STM32学习笔记 - SysTick系统定时器

    010 STM32学习笔记 SysTick系统定时器 1 SysTick简介 SysTick是属于Cortex M内核的一个外设 嵌套在NVIC中 系统定时器是一个24位的递减计数器 每次计数事件位1 SYSCLK 在F429中之前配置的S
  • 最多变的混合模式-实色混合HardMix

    最多变的混合模式 实色混合HardMix 之前写过一篇介绍27种图层混合模式的非常详细 如果你想完全了解底层的原理 这篇文章不会让你失望 PS图层混合模式超详细解答 图层混合模式的原理 王先生的副业的文章 知乎 https zhuanlan
  • 合并两个无序数组java_Java实现把两个数组合并为一个的方法总结

    Java实现把两个数组合并为一个的方法总结 发布时间 2020 10 25 10 40 46 来源 脚本之家 阅读 76 作者 jaycee110905 本文实例讲述了Java实现把两个数组合并为一个的方法 分享给大家供大家参考 具体如下
  • 数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据

    MATLAB 读取数字字符串混杂的文本文件txt中的数据 目标 介绍 纯数字的情况 需要读取的文本文件 判断文件路径 matlab 读取数据的结果 代码块 文字开头 数字在后的情况 需要读取的文本文件 matlab 读取数据的结果 代码块