【问题标题】:Need a string value on an Attribute on my HDF5 File需要我的 HDF5 文件的属性上的字符串值
【发布时间】:2018-11-15 04:37:49
【问题描述】:

我正在尝试在我的数据集上添加一些属性并且它工作正常,但是在编写属性的值时我遇到了一个问题,我需要它们是一个字符串,而不是 INT 或浮点或其他,每个教程我在互联网上发现这些属性使用 int 值.. 我尝试了很多不同的东西,但没有一个效果很好,代码变得非常丑陋,这是我的代码:

    foreach (BasicVariable bv in pf.basicVariableList.bvList)
    {               
        H5DataSetId dataSetId = H5D.create(bvGroupId, bv.bvTag, typeId, spaceId);
        bv.atribList.Add(new Atribbs("Eng. Unit", "Temperatura"));
        bv.atribList.Add(new Atribbs("Atrib2", "Teste"));
        foreach(Atribbs a in bv.atribList )
        {


            H5DataTypeId auxDT = H5T.copy(H5T.H5Type.C_S1);
            H5T.setSize(auxDT, H5T.getSize(H5T.H5Type.C_S1));
            const int auxData = 2;
            long[] auxDim = new long[1];
            auxDim[0] = 1;
            H5DataSpaceId auxDS = H5S.create_simple(1, auxDim);


            var attr_id = H5A.create(dataSetId, a.attName, auxDT, auxDS);
            byte[] bytes = Encoding.UTF8.GetBytes(a.valueStr);
            var atrData = new string[] { Encoding.Default.GetString(bytes)};
            H5A.write<string>(attr_id, auxDT, new H5Array<string>(atrData));

            H5A.close(attr_id);
        }
        H5D.close(dataSetId);
    }
    H5F.close(fileId);

我创建的属性是“Eng. Unit”和“Atrib2”,效果很好,问题是“Eng. Unit”应该有“Temperatura”值,“Atrib2”应该有“Teste” “因为它的价值,这就是我在 hdfl 查看器上得到的 enter image description here

enter image description here

【问题讨论】:

    标签: c# string encoding attributes hdf5


    【解决方案1】:

    也许你想看看HDFql,它极大地简化了 HDF5 文件的处理方式。这是在 C# 中使用 HDFql 的解决方案(假设 HDF5 文件名为 test.h5,数据集名为 dset):

    HDFql.Execute("USE FILE test.h5");   // use (i.e. open) HDF5 file "test.h5"
    
    HDFql.Execute("CREATE ATTRIBUTE \"dset/Eng. Unit\" AS VARCHAR VALUES(Temperatura)");   // create attribute "Eng. Unit" in dataset "dset" with an initial value of "Temperatura"
    
    HDFql.Execute("CREATE ATTRIBUTE dset/Atrib2 AS VARCHAR VALUES(Teste)");   // create attribute "Atrib2" in dataset "dset" with an initial value of "Teste"
    

    【讨论】:

    • 天哪……这太完美了
    • 我只需要帮助将 HDFql 添加到我的项目中...你能帮帮我吗?我下载了 .zip 文件
    • 请看第 3.5 节。参考手册 (hdfql.com/resources/HDFqlReferenceManual.pdf) 解释了如何在 C# 中使用/设置 HDFql。
    • 谢谢!工作中!另一件事...我想在数据集上存储对象,它有 3 个属性,DateTime、Int64 和 String,我如何创建具有这三列数据类型的数据集?
    猜你喜欢
    • 2021-02-09
    • 2021-06-18
    • 1970-01-01
    • 2015-09-29
    • 2016-08-02
    • 2014-07-04
    • 2021-11-27
    • 2019-12-28
    • 2015-11-07
    相关资源
    最近更新 更多