Hi all,
I've just started using the HDF5 C interface and I've been having a few
problems. I'm sure it's some simple thing that I've overlooked, but it'd be
great if you guys could help find what I've done wrong!!
I can read data with no problems, but when I want to write my results to an
HDF5 file things go wrong. I'm trying to write a 2000x2200 array, but the
lines being output to the H5 file are not what I expect.
I have created an example that is supposed to write the line number to each
column in an H5 file (datatype: H5T_NATIVE_USHORT) but rather than the
expected results I get something like this:
0 0 0 0 0 0 0 .....
0 0 4009 0 1 1 1 .....
1 1 1 1 0 0 4009 .....
2 2 2 2 2 2 2 .....
3 3 3 3 3 3 3 .....
The '4009' moves 4 columns to the right with each line.
Any ideas what the problem could be? The same issue exists (with different
numbers, of course) when I try with a floating point data type.
I've included the sample code I used to generate the data below. Originally
there was lots of error checking (based on the status returned from the HDF
commands) for each step of the HDF process, but for brevity I remove those
checks as they showed no problems:
#include <stdlib.h>
#include <hdf5.h>
int Save_f_Data(hid_t,char *,short unsigned int **,int,int);
void alloc_f_2dim (short unsigned int ***,int,int);
int main()
{
char *name="TESTARR";
int xsize=2200;
int ysize=2000;
int retval;
hid_t outfile;
herr_t status;
outfile=H5Fcreate("/home/simon/Desktop/TEST/outtest.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
short unsigned int **testarr;
int i,j;
alloc_f_2dim (&testarr,xsize,ysize);
for (i=0;i<xsize;i++) for (j=0;j<ysize;j++) testarr[i][j]=i;
retval=Save_f_Data(outfile,name,testarr,xsize,ysize);
status=H5Fclose(outfile);
printf("Running!\n");
return 0;
}
int Save_f_Data(hid_t outfile,char *setname,short unsigned int **
procarr,int xsize, int ysize)
{
herr_t status;
hid_t dataspace,dataset,datatype;
hsize_t dims[2]={xsize,ysize};
dataspace=H5Screate_simple(2,dims,dims);
dataset=H5Dcreate(outfile,setname,H5T_NATIVE_USHORT,dataspace,H5P_DEFAULT);
status=H5Dwrite(dataset,H5T_NATIVE_USHORT,H5S_ALL,H5S_ALL,H5P_DEFAULT,procarr[0]);
status=H5Sclose(dataspace);
status=H5Dclose(dataset);
return 0;
}
void alloc_f_2dim (short unsigned int ***ptr,int nrh,int nch)
{
int i = 0;
short unsigned int **p = NULL;
p = (short unsigned int **) calloc ((nrh + 1), sizeof (short unsigned int
*));
if (!p) {
fprintf(stderr,"allocation failure dim0 in alloc_d_2dim()");
}
for (i = 0; i <= nrh; i++) {
p[i] = (short unsigned int *) calloc ((nch + 1), sizeof (short
unsigned int));
if (!p[i]) {
fprintf(stderr,"allocation dim1 in alloc_d_2dim()");
}
}
*ptr = p;
return;
}
···
--
View this message in context: http://hdf-forum.184993.n3.nabble.com/Problem-writing-array-to-an-HDF5-file-tp1464609p1464609.html
Sent from the hdf-forum mailing list archive at Nabble.com.