MATLAB中格式化文本处理

目录

格式化操作符的字段

转换字符

子类型

精度

字段宽度

标志

值标识符

特殊字符

设置字段宽度和精度

精度和字段宽度的格式化规则

在格式设定符外部指定字段宽度和精度

在宽度和精度字段中指定带编号的标识符

使用标识符的限制


        要将数据转换为文本并控制其格式,可以将格式化操作符与常见的转换函数(如 num2str 和 sprintf)结合使用。这些操作符可控制记数法、对齐方式、有效位数以及其他内容。它们与 C 编程语言中的 printf 函数使用的操作符类似。格式化文本的典型用途包括用于显示和输出文件的文本。

        例如,%f 使用定点记数法将浮点值转换为文本。通过为该操作符添加信息来调整格式,例如使用 %.2f 表示小数点后两位数,或使用 %12f 表示输出中的 12 个字符,并根据需要用空格填充。

A = pi*ones(1,3);
txt = sprintf('%f | %.2f | %12f', A)
txt = 
'3.141593 | 3.14 |     3.141593'

        可以将操作符与普通文本以及格式设定符中的特殊字符组合使用。例如,\n 会插入一个换行符。

txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)
txt = 
    'Displaying pi: 
      3.141593 
      3.14 
          3.141593'

​        支持格式化操作符的函数为 compose、num2str、sprintf、fprintf 以及错误处理函数 assert、error、warning 和 MException。​

格式化操作符的字段

        格式化操作符可以包含六个字段,如图所示。从右至左,这些字段分别为转换字符、子类型、精度、字段宽度、标志以及数值标识符。(该操作符中不允许使用空格字符。在此显示空格字符只是为方便阅读。)除了前导的%字符之外,转换字符是唯一的必需字段。

转换字符

转换字符指定输出的表示法。它包含单个字符并显示在格式设定符的最后。

设定符

描述

c

单个字符。

d

十进制记数法(有符号)。

e

指数记数法(使用小写 e,如 3.1415e+00 中一样)。

E

指数记数法(使用大写 E,如 3.1415E+00 中一样)。

f

定点记数法。

g

更紧凑的 %e 或 %f。(将不输出无意义的零。)

G

与 %g 相同,但使用大写 E。

o

八进制记数法(无符号)。

s

字符向量或字符串数组。

u

十进制记数法(无符号)。

x

十六进制记数法(无符号,使用小写字母 a–f)。

X

十六进制记数法(无符号,使用大写字母 A–F)。

        例如,使用不同的转换字符来格式化数值 46,以十进制、定点、指数和十六进制格式显示该数值。

A = 46*ones(1,4);
txt = sprintf('%d   %f   %e   %X', A)
txt = 
'46   46.000000   4.600000e+01   2E'
子类型

        子类型字段为单个字母字符,该字符紧挨在转换字符之前。如果没有子类型字段,转换字符 %o、%x、%X 和 %u 会将输入数据按整数进行处理。要将输入数据按浮点值进行处理并将它们转换为八进制、十进制或十六进制表示形式,请使用以下子类型设定符之一。

b

输入数据为双精度浮点值,而不是无符号整数。例如,要以十六进制格式输出双精度值,请使用类似 %bx 的格式。

t

输入数据为单精度浮点值,而不是无符号整数。

精度

        格式化操作符中的精度字段是一个非负整数,紧跟在句点之后。例如,在操作符 %7.3f 中,精度为 3。对于 %g 操作符,精度指示要显示的有效位数。对于 %f、%e 和 %E 操作符,精度指示要显示在小数点右侧的位数。

        使用精度字段按不同精度显示数值。

txt = sprintf('%g   %.2g   %f   %.2f', pi*50*ones(1,4))
txt =

    '157.08   1.6e+02   157.079633   157.08'

        虽然可以在格式化操作符中为输入文本指定精度(例如,在 %s 操作符中),但通常不会这么做。如果将精度指定为 p,并且 p 小于输入文本中的字符数,则输出将仅包含前 p 个字符。

字段宽度

        格式化操作符中的字段宽度是一个非负整数,用于在格式化输入值时指定输出中的位数或字符数。例如,在操作符 %7.3f 中,字段宽度为 7。

        指定不同的字段宽度。要显示每个输出的宽度,请使用 | 字符。默认情况下,当字段宽度大于字符数时,输出文本会使用空格字符进行填充。

txt = sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))
txt =

    '|1.570796e+02|   1.570796e+02|157.079633|     157.079633|'

        用在文本输入时,字段宽度可确定是否要使用空格填充输出文本。如果字段宽度小于或等于输入文本中的字符数,则没有任何影响。

txt = sprintf('%30s', 'Pad left with spaces')
txt =

    '          Pad left with spaces'
标志

        标志是可选项,用于控制输出文本的其他格式。下表介绍了可用作标志的字符。

字符

描述

示例

减号 (-)

在字段中左对齐转换后的参数。

%-5.2d

加号 (+)

对于数值,始终输出前导的符号字符(+ 或 -)。
对于文本值,在字段中右对齐转换后的参数。

%+5.2d
%+5s

空格

在值之前插入空格。

% 5.2f

零 (0)

用零而不是空格进行填充。

%05.2f

井号 (#)

修改选定的数值转换:

  • 对于 %o、%x 或 %X,将输出 0、0x 或 0X 前缀。

  • 对于 %f、%e 或 %E,即使精度为零也将输出小数点。

  • 对于 %g 或 %G,不删除尾随零或小数点。

%#5.0f

        左对齐或右对齐输出。默认行为是右对齐输出文本。

txt = sprintf('right-justify: %12.2f\nleft-justify: %-12.2f',...
              12.3, 12.3)
txt =

    'right-justify:        12.30
     left-justify: 12.30       '

        显示正数的 + 符号。对于正数,默认行为是忽略前导的 + 符号。

txt = sprintf('no sign: %12.2f\nsign: %+12.2f',...
              12.3, 12.3)
txt =

    'no sign:        12.30
     sign:       +12.30'

        用空格或零向左侧填充。默认行为是使用空格进行填充。

txt = sprintf('Pad with spaces: %12.2f\nPad with zeroes: %012.2f',...
              5.2, 5.2)
txt =

    'Pad with spaces:         5.20
     Pad with zeroes: 000000005.20'

注意

        可以在格式化操作符中指定多个标志。

值标识符

        默认情况下,sprintf 等函数会按顺序将值从输入参数插入到输出文本中。要按非顺序处理输入参数,请通过在格式设定符中使用数值标识符来指定顺序。指定非连续的参数时,需要在 % 符号后紧接一个整数,并在整数后面添加 $ 符号。

按顺序排序按标识符排序
sprintf('%s %s %s',...
        '1st','2nd','3rd')

ans =

    '1st 2nd 3rd'
sprintf('%3$s %2$s %1$s',...
        '1st','2nd','3rd')

ans =

    '3rd 2nd 1st'
特殊字符

        特殊字符可以是输出文本的一部分。但是,由于它们不能以普通文本形式输入,因此需要使用特定的字符序列来表示。要将特殊字符插入到输出文本中,请使用下表中的任何字符序列。

特殊字符

格式设定符中的表示形式

单引号

''

百分比字符

%%

反斜杠

\\

警报

\a

退格符

\b

换页符

\f

换行符

\n

回车符

\r

水平制表符

\t

垂直制表符

\v

其 Unicode® 数值可以通过十六进制数 N 表示的字符

\xN

示例:sprintf('\x5A') 返回 'Z'

其 Unicode 数值可以通过八进制数 N 表示的字符

\N

示例:sprintf('\132') 返回 'Z'

设置字段宽度和精度

        格式化操作符遵循一组规则来按指定的字段宽度和精度格式化输出文本。也可以在格式设定符之外为字段宽度和精度指定值,并将带编号的标识符与字段宽度和精度结合使用。

精度和字段宽度的格式化规则

        下图演示了字段宽度和精度设置如何影响格式化函数的输出。在该图中,格式化操作符中%符号后面的零表示为输出文本添加前导零,而非空格字符。

Flowchart relating input value, Format operator, and output text.

  • 如果未指定精度,则精度默认为 6。

  • 如果精度 p 小于输入项的小数部分的位数,则在小数点后只会显示 p 位数。输出项中的小数值将被舍入。

  • 如果精度 p 大于输入项的小数部分的位数 f,则在小数点后会显示 p 位数。输出项中的小数部分将使用 p-f 个零向右侧扩充。

  • 如果未指定字段宽度,则字段宽度默认为 p+1+n,其中 n 为输入值的整数部分的位数。

  • 如果字段宽度 w 大于 p+1+n,则输出值的整数部分将使用 w-(p+1+n) 个其他字符向左侧填充。其他字符为空格字符,除非格式化操作符包含 0 标志。在这种情况下,其他字符为零。

在格式设定符外部指定字段宽度和精度

        可以使用顺序参数列表中的值来指定字段宽度和精度。使用星号 (*) 来代替格式化操作符的字段宽度或精度字段。

        例如,格式化并显示三个数值。在每种情况中,都使用星号以指定字段宽度或精度取自跟在格式设定符后面的输入参数。

txt = sprintf('%*f   %.*f   %*.*f',...
              15,123.45678,...     
              3,16.42837,...       
              6,4,pi)
txt =

    '     123.456780   16.428   3.1416'

下表介绍了该示例中每个格式化操作符的作用。

格式化操作符

描述

%*f

将宽度指定为以下输入参数 15。

%.*f

将精度指定为以下输入参数 3。

%*.*f

将宽度和精度指定为以下输入参数 6 和 4。

        可以混合使用两种形式。例如,从后跟的输入参数获取字段宽度,从格式设定符获取精度。

txt = sprintf('%*.2f', 5, 123.45678)
txt =

    '123.46'
在宽度和精度字段中指定带编号的标识符

        也可以使用下图中所示的语法将字段宽度和精度指定为非顺序的参数列表中的值。在格式化操作符中,使用跟在编号标识符和 $ 符号后面的星号指定字段宽度和精度。使用跟在格式设定符后面的输入参数指定字段宽度和精度的值。

Schematic of formatting operator characters.

        例如,格式化并显示三个数值。在每种情况中,都使用编号标识符以指定字段宽度或精度取自跟在格式设定符后面的输入参数。

txt = sprintf('%1$*4$f   %2$.*5$f   %3$*6$.*7$f',...
              123.45678, 16.42837, pi, 15, 3, 6, 4)
txt =

    '     123.456780   16.428   3.1416'

        下表介绍了该示例中每个格式化操作符的作用。

格式化操作符

描述

%1$*4$f

1$ 将第一个输入参数 123.45678 指定为值

*4$ 将第四个输入参数 15 指定为字段宽度

%2$.*5$f

2$ 将第二个输入参数 16.42837 指定为值

.*5$ 将第五个输入参数 3 指定为精度

%3$*6$.*7$f

3$ 将第三个输入参数 pi 指定为值

*6$ 将第六个输入参数 6 指定为字段宽度

.*7$ 将第七个输入参数 4 指定为精度

使用标识符的限制

        如果有任一格式化操作符包含标识符字段,则格式设定符中的所有操作符都必须包含标识符字段。如果在同一函数调用中同时使用顺序和非顺序的次序,则输出将在首次在顺序标识符和非顺序标识符之间切换时被截断。

有效语法无效语法
sprintf('%d %d %d %d',...
        1,2,3,4)

ans =

    '1 2 3 4'
sprintf('%d %3$d %d %d',...
        1,2,3,4)

ans =

    '1 '

        如果函数调用提供的输入参数的数量多于格式设定符中的格式化操作符数量,则这些操作符将被重复使用。但是,只有使用顺序排序的函数调用才会重复使用格式化操作符。当使用编号标识符时,无法重复使用格式化操作符。

有效语法无效语法
sprintf('%d',1,2,3,4)

ans =

    '1234'
sprintf('%1$d',1,2,3,4)

ans =

    '1'

        如果在输入数据为向量或数组时使用编号标识符,则输出不包含格式化数据。

有效语法无效语法
v = [1.4 2.7 3.1];
sprintf('%.4f %.4f %.4f',v)

ans =

    '1.4000 2.7000 3.1000'
v = [1.4 2.7 3.1];
sprintf('%3$.4f %1$.4f %2$.4f',v)

ans =

  1×0 empty char array

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/452625.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AnaConda/MiniConda/Linux】使用sudo python或切换root管理员conda环境被绕过解决方案

写在前面 部分机型修改环境变量存在风险,可能用于被覆盖而出现大量命令无法找到的情况 可以输入这个解决 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin往期相关内容 探索Miniconda3:简单、灵活的Python环境和…

【线代基础】张量、向量、标量、矩阵的区别

1、标量(Scalar) 纯数字,无方向性、无维度概念。因此也叫 标量张量、零维张量、0D张量 例如,x18,x21.34 x1、x2即为标量 2、张量(tensor) 具有方向性,可以理解为一个多维数组&a…

相机模型Omnidirectional Camera(全方位摄像机)

1. 背景 大多数商用相机都可以描述为针孔相机,通过透视投影进行建模。然而,有些投影系统的几何结构无法使用传统针孔模型来描述,因为成像设备引入了非常高的失真。其中一些系统就是全方位摄像机。 有几种方法可以制作全向相机。屈光照相机(D…

《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)

1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助。 2.select 下拉框 2.1Select类 1.在Selenium中,针对html的标签sel…

工科硕士研究生毕业论文撰写总结

工科硕士研究生毕业论文撰写总结 最近一段看了十几篇研究生毕业论文,发现不少问题。结合最近几年当评委及审论文的经验来总结下工科硕士研究生毕业论文撰写毕业论文问题与经验。 一.科技论文的总要求 论文是写给同行看的,注意读者对象。&a…

细粒度IP定位参文27(HGNN):Identifying user geolocation(2022年)

[27] F. Zhou, T. Wang, T. Zhong, and G. Trajcevski, “Identifying user geolocation with hierarchical graph neural networks and explainable fusion,” Inf. Fusion, vol. 81, pp. 1–13, 2022. (用层次图、神经网络和可解释的融合来识别用户的地理定位) 论文地址:…

十四、软考-系统架构设计师笔记-云原生架构设计理论与实践

1、云原生架构背景 云原生架构定义 从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、…

趣学前端 | JavaScript标准库

背景 最近睡前习惯翻会书,重温了《JavaScript权威指南》这本书。这本书,文字小,内容多。两年了,我才翻到第十章。因为书太厚,平时都充当电脑支架。 JavaScript标准库 今天阅读的章节是JavaScript标准库,…

【Kimi帮我看论文(四)】TransE:Translating Embeddings for Modeling Multi-relational Data

一、论文信息 1 标题 Translating Embeddings for Modeling Multi-relational Data 2 作者 Antoine Bordes, Nicolas Usunier, Alberto Garcia-Durn, Jason Weston, Oksana Yakhnenko 3 研究机构 Universit de Technologie de Compigne – CNRS Heudiasyc UMR 7253 Compi…

C# SM2加解密 ——国密SM2算法

SM2 是国家密码管理局组织制定并提出的椭圆曲线密码算法标准。 本文使用第三方密码库 BouncyCastle 实现 SM2 加解密,使用 NuGet 安装即可,包名:Portable.BouncyCastle,目前最新版本为:1.9.0。 using Org.BouncyCastl…

Docker部署黑马商城项目笔记

部署后端 创建mysql目录如下,上传对应的文件 运行以下命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entry…

swagger踩坑之请求类不显示具体字段

swagger踩坑之请求类不显示具体字段 省流:枚举字段需要加上ApiModelProperty注解 过程复现: TestEnum 枚举不加注解,swagger的UI类不显示详细字段 Data Accessors(chain true) ApiModel(value "test对象", description &quo…

管理交换机

文章目录 本地管理交换机物理交换机如何本地管理ensp上的虚拟交换机如何本地管理认证模式的三种方式 远程管理交换机配置通过Telnet登录设备配置通过STelnet登录设备 --推荐的方式检查配置结果使用Cloud管理多个交换机时 华为官网配置信息 本地管理交换机 当交换机首次使用时&…

语音合成技术:从概念到应用的全面解析

目录 前言1 语音合成技术简介2 技术解析2.1 语音合成的基本流程2.2 传统语音合成技术2.3 基于深度学习的语音合成 3 语音合成技术应用3.1 虚拟助手与聊天机器人3.2 无障碍通信3.3 语言学习3.4 媒体和娱乐 4 语音合成技术的挑战4.1 自然性的提升4.2 情感表达的深化4.3 多样性与包…

Docker自建蜜罐系统【失陷检测、外网威胁感知、威胁情报】

项目地址: https://hfish.net Hfish是一款基于Docker的网络钓鱼平台,它能够帮助安全团队模拟各种网络钓鱼攻击,以测试和提高组织的安全防御能力。 Hfish的优点 为什么选择Hfish? 蜜罐通常被定义为具有轻量级检测能力、低误报率…

【3GPP】【核心网】【5G】NG接口介绍(超详细)

目录 1. NG接口定义 2. 接口原则和功能 3. NG 接口控制面 5. NG接口主要信令流程 6. NG SETUP过程 1. NG接口定义 NG接口指无线接入网与5G核心网之间的接口。在5G SA网络中,gNB之间通过Xn接口进行连接,gNB与5GC之间通过NG接口进行连接。NG接口分为NG-C接口和NG…

O2OA开发的新版考勤管理

O2OA(翱途)开发平台对考勤管理重新进行了开发,全新的版本更好用,更直观。 考勤管理对员工的工作出勤情况进行记录、分析和报告的过程。它是对员工工作表现评估的重要依据,也是企业管理中的重要组成部分。考勤管理包括对员工的工作时间、迟到…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

绝地求生:PUBG官方公布2024工作计划

大家好,我是闲游盒。 首先今天官方公布了2024工作计划,下面我们一起来了解一下2024工作重点,官方提到的2点:一是通过对PUBG的维护和优化来改善线上服务的质量,二是为玩家们提供更加多姿多彩的游戏体验。我个人看完了全…

新品发布:广州大彩科技COF系列2.1寸480*480 IPS 串口屏发布!

一、产品介绍 该产品是一款2.1寸分辨率为 480480的医用级工业组态串口屏,拥有2.1寸IPS液晶屏,分辨率有480480(实际显示为R240内切圆区域),支持电容触摸。采用COF超薄结构工艺设计,用户安装便捷灵活&#x…