Is H5T_STD_I32BE the native int datatype for your platform? If no, you may want
to replace it by H5T_NATIVE_INT that will handle the proper int type.

Pierre
 
On Tue, Feb 10, 2015 at 04:29:35PM +0100, Sensei wrote:
> Dear all,
> 
> I am sorry if I am posing a stupid question, but it seems I cannot really
> see how I can solve this on my own.
> 
> The problem is understanding HDF5's possibility of creating datasets with
> slabs. For instance, write a 5x2 matrix with only one row set to { 42, 42 }.
> 
> As far as I've learned reading the docs, I create the file, the dataspace
> with properties (5x2 of integers, for instance), and finally the dataspace
> itself. Then I can select the hyperslab and write to it.
> 
> What I'm getting is junk. I suspect I'm writing what I'm not supposed to
> write, or reading where I've not intended to read, or both. Here's the dump:
> 
> HDF5 "test.h5" {
> GROUP "/" {
>    DATASET "dset" {
>       DATATYPE  H5T_STD_I32BE
>       DATASPACE  SIMPLE { ( 5, 2 ) / ( 5, 2 ) }
>       DATA {
>       (0,0): 704643072, 704643072,
>       (1,0): 0, 0,
>       (2,0): 16777216, 0,
>       (3,0): 16777216, 0,
>       (4,0): 16777216, 0
>       }
>    }
> }
> }
> 
> 
> I've played with my values, with count, offset and block, but I cannot grasp
> how it works.
> 
> The code is below, it is commented with what I think each instruction does,
> and what each variable means.
> 
> 
> I really hope you can help me.
> 
> Thank you!
> 
> 
> 
> #include "hdf5.h"
> 
> int main()
> {
>   hid_t       file_id, dataspace_id, dataset_id;
>   herr_t      status;
>   int         rank = 2;            /* rank 2 tensor */
>   hsize_t     dims[2] = { 5, 2 };  /* 5 rows, 2 columns */
> 
>   hsize_t     offset[2], stride[2], count[2], block[2];
> 
>   int         newdata[3] = { 42, 42 };
> 
>   /* create file */
>   file_id = H5Fcreate("test.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
> 
>   /* create dataspace */
>   dataspace_id = H5Screate_simple(rank, dims, NULL);
> 
>   /* create dataset: the ACTUAL data */
>   dataset_id = H5Dcreate(file_id, "/dset", H5T_STD_I32BE, dataspace_id,
>                        H5P_DEFAULT);
> 
>   /* slab properties */
>   offset[0] = 1; /* row offset, select second row */
>   offset[1] = 0; /* col offset, first column*/
> 
>   stride[0] = 1; /* select every 1 element, don't skip any row*/
>   stride[1] = 1; /* and don't skip any elements on columns */
> 
>   count[0]  = 1; /* select only one block per dimension */
>   count[1]  = 1; /* supposing 1 block means one entire row with this */
> 
>   block[0]  = 1; /* size of the row block */
>   block[1]  = 3; /* column block size */
> 
>   /* select a slab */
>   status = H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET,
>                              offset, stride, count, block);
> 
>   /* write! */
>   status = H5Dwrite(dataset_id, H5T_STD_I32BE, H5S_ALL, H5S_ALL,
> H5P_DEFAULT,
>                   newdata);
> 
>   /* close dataset */
>   status = H5Dclose (dataset_id);
> 
>   /* close dataspace */
>   status = H5Sclose(dataspace_id);
> 
>   /* close file */
>   status = H5Fclose(file_id);
> 
>   return 0;
> }
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
> Twitter: https://twitter.com/hdf5

-- 
-----------------------------------------------------------
Pierre de Buyl
KU Leuven - Institute for Theoretical Physics
T +32 16 3 27355
W http://pdebuyl.be/
-----------------------------------------------------------

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to