如何在 Matlab 中的 HDF5 属性字符串中放置换行符

Posted

技术标签:

【中文标题】如何在 Matlab 中的 HDF5 属性字符串中放置换行符【英文标题】:How to put a line break in HDF5 attribute string in Matlab 【发布时间】:2016-02-25 16:07:07 【问题描述】:

我想知道如何在 HDF5 属性字符串下面添加换行符。

DescType_id = H5T.copy ('H5T_C_S1');
H5T.set_size (DescType_id, numel(description));
H5T.set_strpad(DescType_id,'H5T_STR_NULLTERM');
DescAttr_id = H5A.create (g2id, 'description', DescType_id, ...
    STimeSpace, 'H5P_DEFAULT');
H5A.write (DescAttr_id, DescType_id, description);
H5T.close(DescType_id);
H5A.close(DescAttr_id);

我的描述变量是:

description="Experiment:\nID: 1234\nLocation: London"

我希望换行符在上面的代码中类似于 '\n'。预期输出:

Group '/' 
  Group '/G1' 
    Attributes:
      'description':  'Experiment:
      ID: 1234
      Location: London'

非常感谢您的帮助。谢谢。

【问题讨论】:

【参考方案1】:

您应该将description 设置为正确的字符串:

description = sprintf('Experiment:\nID: 1234\nLocation: London');

应该注意,通常的转义序列实际上是由 I/O 函数(即fprintfsprintf)解释的,而不是由 MATLAB 语言解析器解释的。这意味着,例如,文字 '\n'(在 MATLAB 中)是一个由两个字符、一个反斜杠和一个 n 组成的 char 数组,而在 C 中,文字 "\n" 是一个由两个字符组成的 const char 数组,一个一个换行符,另一个是字符串终止符 NUL。

写上述description 的一种不可移植但“等效”的方式是将子字符串与行分隔符连接起来:

description = ['Experiment:' char(10) 'ID: 1234' char(10) 'Location: London'];

其中char(10) 是具有 UTF-8 代码 10 的字符,恰好是换行符。

【讨论】:

@user4530590 很高兴为您提供帮助。

以上是关于如何在 Matlab 中的 HDF5 属性字符串中放置换行符的主要内容,如果未能解决你的问题,请参考以下文章

使用 HDF5 保存要在 C++ 中读取的 MATLAB 结构

通过MATLAB将矩阵数据写入HDF5文件中的每个数据类型成员

torch系列:torch中如何读取存放在hdf5文件中的字符串

在 Matlab 中转置 Python 创建的 HDF5 数据集

在 MATLAB 中读取 HDF5 数据集的一些特定元素

用 Matlab 加载 HDF5 [关闭]