Hi
So I tried, but not sure it worked. I cant figure out how to connect the
dataset to a file, so I can view it in hdf-viewer. Here is my method for
writing a an array of Strings to a dataset.
private static void writeUn() {
int file_id = -1;
int dcpl_id = -1;
int dataspace_id = -1;
int dataset_id = -1;
int memtype_id = -1;
int filetype_id = -1;
int plist = -1;
long[] dims = { DIM_X };
long[] chunk_dims = { CHUNK_X };
long[] maxdims = { HDF5Constants.H5S_UNLIMITED };
byte[][] dset_data = new byte[DIM_X][SDIM];
StringBuffer[] str_data = new StringBuffer[DIM_X];
// Initialize the dataset.
for (int indx = 0; indx < DIM_X; indx++)
str_data[indx] = new StringBuffer(String.valueOf("iteration "
+ (indx + 1)));
// Create a new file using default properties.
try {
file_id = H5.H5Fcreate(FILENAME_A, HDF5Constants.H5F_ACC_TRUNC,
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
try {
filetype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
H5.H5Tset_size(filetype_id, SDIM);
plist = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
H5.H5Pset_layout(plist, HDF5Constants.H5D_CHUNKED);
H5.H5Pset_chunk(plist, 1, new long[] { 1024 });
H5.H5Pset_deflate(plist, 5);
dataset_id = H5.H5Screate_simple(1, new long[] { 25000000 },
new
long[] { HDF5Constants.H5S_UNLIMITED });
} catch (Exception e) {
e.printStackTrace();
}
// Write the data to the dataset.
try {
for (int indx = 0; indx < DIM_X; indx++) {
for (int jndx = 0; jndx < SDIM; jndx++) {
if (jndx < str_data[indx].length())
dset_data[indx][jndx] = (byte) str_data[indx]
.charAt(jndx);
else
dset_data[indx][jndx] = 0;
}
}
if ((dataset_id >= 0) && (memtype_id >= 0))
H5.H5Dwrite(dataset_id, HDF5Constants.H5T_C_S1,
HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
HDF5Constants.H5P_DEFAULT, dset_data);
} catch (Exception e) {
e.printStackTrace();
}
}
So my question, is this correct way of doing it and how do I connect the
dataset to the file. I guess it's time of creating the dataset.
After this is the way forward, like this
1. H5.H5Dextend(dataset_id, extdims);
2. dataspace_id = H5.H5Dget_space(dataset_id);
3. H5.H5Sselect_all(dataspace_id);
// Subtract a hyperslab reflecting the original dimensions from
// the
// selection. The selection now contains only the newly extended
// portions of the dataset.
count[0] = dims[0];
count[1] = dims[1];
H5.H5Sselect_hyperslab(dataspace_id,
HDF5Constants.H5S_SELECT_NOTB, start, null,
count, null);
// Write the data to the selected portion of the dataset.
if (dataset_id >= 0)
H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT,
HDF5Constants.H5S_ALL, dataspace_id,
HDF5Constants.H5P_DEFAULT, extend_dset_data);
I also see that H5.H5Dextend is depricated, from version 1.8, is there
another method to user?
cheers, Håkon
On 19 March 2010 16:05, Peter Cao <[email protected]> wrote:
> Hi Hakon,
>
> I assume you are using 1D array of strings. Here are some hints for you:
>
> 1) You may just use string dataype. You can use variable length string if
> your strings have different size,
> or you can use fixed length string if your strings are about the same
> length, e.g.
> tid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
> for fixed length of 128
> H5.H5Tset_size(128);
> for variable length
> H5.H5Tset_size(tid, HDF5Constants.H5T_VARIABLE
> 2) Set dataset creation property for chunking and compression
> plist = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
> H5.H5Pset_layout(plist, HDF5Constants.H5D_CHUNKED);
> H5.H5Pset_chunk(plist, 1, new long[] {1024}); // set the
> chunk size to be about 2MB for best performance
> H5.H5Pset_deflate(plist, 5);
>
> 3) Set the dimension size, e.g.
> sid = H5.H5Screate_simple(1, new long[]{25000000}, new long[]
> {HDF5Constants.H5S_UNLIMITED});
>
>
> Thanks
> --pc
>
>
> Håkon Sagehaug wrote:
>
>> Hi Peter
>>
>> My problem is actually before I can create the dataset the first time, I
>> can't figure out the correct data type to use. I guess I should use a byte
>> type, since the strins are converted to bytes
>>
>> Håkon
>>
>> On 19 March 2010 15:29, Peter Cao <[email protected] <mailto:
>> [email protected]>> wrote:
>>
>> Håkon,
>>
>> There was a typo in my previous email. You do NOT need to read the
>> first chunk in order
>> to write the second chunk. You can just select whatever chunks you
>> want to write.
>>
>> Sorry for the misleading.
>>
>> Thanks
>> --pc
>>
>>
>> Håkon Sagehaug wrote:
>>
>> Hi Peter
>>
>> I'm trying to do it with the read chunk by chunk, but having
>> trouble creating the data set, in the example [1] it's done
>> like this
>>
>> H5.H5Dcreate(file_id, DATASETNAME,
>> HDF5Constants.H5T_STD_I32LE,
>> dataspace_id, dcpl_id);
>>
>> the type is for int, but I cant seem to find the correct one
>> for string, in example[2] with string arrays t looks like this,
>>
>> H5.H5Dcreate(file_id, DATASETNAME, filetype_id,
>> dataspace_id, HDF5Constants.H5P_DEFAULT);
>>
>> If I create the dataset like this when I want to dynamiccaly
>> add I can only get the first byte in each of the string. Any
>> tips on what type I should use?
>>
>>
>> Håkon
>>
>> [1]
>>
>> http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/java/examples/datasets/H5Ex_D_UnlimitedAdd.java
>>
>> [2]
>> http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/java/examples/datatypes/H5Ex_T_String.java
>>
>>
>>
>>
>> -- Håkon Sagehaug, Scientific Programmer
>> Parallab, Uni BCCS/Uni Research
>> [email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>,
>>
>> phone +47 55584125
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> [email protected] <mailto:[email protected]>
>>
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>>
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> [email protected] <mailto:[email protected]>
>>
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> [email protected]
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>>
>>
>
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org