Yes, there is support for writing VL strings in datasets, but not in 
attributes. Also there is no support for writing VL non-strings for datasets 
or attributes. There is an existing issue (JAVA-1833) in our bug database for 
these issues and I will add this request for attribute support.

Allen


On Wednesday, April 16, 2014 12:06:41 PM Daniel Tetlow wrote:
> Hi,
> 
> I've seen the Java example for variable length string datasets, but I just
> want to write some attributes. What I'm trying to do is create files with
> UTF8 string attributes that can be easily read by h5py. But the only way
> h5py will work with UTF8 attributes is if they're variable length.
> 
> The code below works fine for a fixed length attribute, but crashes the JVM
> when I set the dtype size to H5T_VARIABLE.
> 
> import java.io.File;
> import static ncsa.hdf.hdf5lib.H5.*;
> import static ncsa.hdf.hdf5lib.HDF5Constants.*;
> import org.apache.log4j.BasicConfigurator;
> 
> public class WriteVariableUTF8 {
> 
>     public static void main(String[] args) throws Exception {
>         BasicConfigurator.configure(); // log4j.
> 
>         byte[] bytes = "world".getBytes("UTF-8");
> 
>         File path = new File("C:/Users/dan/variableutf8.h5");
>         int file = H5Fcreate(path.getAbsolutePath(), H5F_ACC_TRUNC,
> H5P_DEFAULT, H5P_DEFAULT);
> 
>         int dtype = H5Tcopy(H5T_C_S1);
>         H5Tset_cset(dtype, H5T_CSET_UTF8);
>         H5Tset_size(dtype, H5T_VARIABLE); // works if I set size to
> bytes.length. H5Tset_strpad(dtype, H5T_STR_NULLTERM);
> 
>         int space = H5Screate(H5S_SCALAR);
>         int attr = H5Acreate(file, "hello", dtype, space, H5P_DEFAULT,
> H5P_DEFAULT); H5Awrite(attr, dtype, bytes);
> 
>         H5Aclose(attr);
>         H5Sclose(space);
>         H5Fclose(file);
>     }
> }
> 
> 
> Thanks for your help,
> 
> Dan Tetlow


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

Reply via email to