c# 数据保存到hdf文件

six-years 2015-08-12 10:51:05
[size=16px]c#可以将不同的数据类型的数据保存到HDF文件?
怎么解决HDF5保存字符串数组报错的问题?
怎么设置HDF5显示的列名
[/size]


H5FileId fileId = H5F.create("abcd.hdf", H5F.CreateMode.ACC_TRUNC); // Create a group.
H5GroupId groupId = H5G.create(fileId, "/fromRoot"); // Create a dataspace for common use.
long[] dims = { 20, 2,2 };
string[] strs = { "a", "b", "c" };
H5DataSpaceId dspace = H5S.create_simple(2, dims); // Create a dataset using file as location with absolute path name.

//H5DataSpaceId dspace2 = H5S.create(2, strs); // Create a dataset using file as location with absolute path name.

H5DataSetId dset1Id = H5D.create(fileId, "/fromRoot/intArray", H5T.H5Type.NATIVE_INT, dspace); // Create a dataset using group as location with absolute path name.
H5DataSetId dset2Id = H5D.create(groupId, "/fromRoot/shortArray", H5T.H5Type.NATIVE_DOUBLE, dspace); // Create a dataset using group as location with relative path name.
H5DataSetId dset3Id = H5D.create(groupId, "/fromRoot/notfromRoot", H5T.H5Type.C_S1, dspace);

H5D.write(dset1Id, new H5DataTypeId(H5T.H5Type.NATIVE_INT), new H5Array<int>(new int[] { 1, 2, 4, 56, 62, 234, 43, 342, 4 }));
H5D.write(dset2Id, new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE), new H5Array<double>(new double[] { 1.2, 2.3, 3, 4, 5, 6, 7, 8, 9 }));
//写入string[]乱码
H5D.write<string>(dset3Id, new H5DataTypeId(H5T.H5Type.C_S1), new H5Array<string>(new string[] { "000", "111", "011", "ddd", "eee", "fff", "ggg", "hhh" }));


...全文
255 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
six-years 2015-08-12
  • 打赏
  • 举报
回复
谢谢 可以保存string了,版主下面这两个问题不好做么? 可以将不同的数据类型的数据保存到HDF文件? 怎么设置HDF5显示的列名?
引用 1 楼 q107770540 的回复:
TRY:
   private static byte[] StringToByteArray(string str) 
        { 
            var enc = new System.Text.ASCIIEncoding(); 
            var array1 = enc.GetBytes(str); 
            var charArray = new byte[str.Length + 1]; 
            array1.CopyTo(charArray, 0); 
            charArray[str.Length] = 0; 

            return charArray; 
        } 
        
        public static void SaveString(H5FileId fileId, string dataSetName, String stringToSave) 
        { 
            var charArray = StringToByteArray(stringToSave); 
            var dims = new long[] 
                           { 
                               1 
                           }; 

            H5DataSpaceId dspace = H5S.create_simple(1, dims); 
            H5DataTypeId memtype = H5T.copy(H5T.H5Type.C_S1); 
            H5T.setSize(memtype, stringToSave.Length); 

            // does not work... 
            // H5T.setVariableSize(memtype); 
            
            H5DataSetId dset = H5D.create(fileId, 
                                          dataSetName, 
                                          memtype, 
                                          dspace); 

            var hdf5array = new H5Array<byte>(charArray); 
            
            H5D.write(dset, memtype, hdf5array); 
                  
            H5D.close(dset); 
            H5S.close(dspace); 
            H5T.close(memtype); 
        }
q107770540 2015-08-12
  • 打赏
  • 举报
回复
you can find your answer here: http://hdf5.net/
q107770540 2015-08-12
  • 打赏
  • 举报
回复
you can find your answer here: http://hdf5.net/
q107770540 2015-08-12
  • 打赏
  • 举报
回复
TRY:
   private static byte[] StringToByteArray(string str) 
        { 
            var enc = new System.Text.ASCIIEncoding(); 
            var array1 = enc.GetBytes(str); 
            var charArray = new byte[str.Length + 1]; 
            array1.CopyTo(charArray, 0); 
            charArray[str.Length] = 0; 

            return charArray; 
        } 
        
        public static void SaveString(H5FileId fileId, string dataSetName, String stringToSave) 
        { 
            var charArray = StringToByteArray(stringToSave); 
            var dims = new long[] 
                           { 
                               1 
                           }; 

            H5DataSpaceId dspace = H5S.create_simple(1, dims); 
            H5DataTypeId memtype = H5T.copy(H5T.H5Type.C_S1); 
            H5T.setSize(memtype, stringToSave.Length); 

            // does not work... 
            // H5T.setVariableSize(memtype); 
            
            H5DataSetId dset = H5D.create(fileId, 
                                          dataSetName, 
                                          memtype, 
                                          dspace); 

            var hdf5array = new H5Array<byte>(charArray); 
            
            H5D.write(dset, memtype, hdf5array); 
                  
            H5D.close(dset); 
            H5S.close(dspace); 
            H5T.close(memtype); 
        }
six-years 2015-08-12
  • 打赏
  • 举报
回复
没人用过么

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧