Hi,

I've looked at the example and in my code h5_data->label is of type char*  
(h5_data is a struct). I'm assuming that the problem is in the data type 
conversion from python to C++? I have created the dataset containing "None\0" 
strings in python and I read it in C++ , substitute the strings  and want to 
save them back to the dataset.

Thank you
Sahar

From: Quincey Koziol [via hdf-forum] 
<[email protected]>
Sent: Tue, 8/16/2011 3:53pm
To: sghanavati <[email protected]>
Subject: Re: over-writing variable length string in dataset using hdf5 C++ API

Hi Sahar,


On Aug 2, 2011, at 12:41 PM, sghanavati wrote:


> Hi,

> 

> I have a dataset "dataset_label" in a hdf5 file format which contains a

> string of N elements equals to "None\0". I read the dataset using hdf5 C++

> API:

> 

> hid_t datatype = H5Tcopy (H5T_C_S1);

> H5Tset_size (datatype, H5T_VARIABLE);

> H5::DataType dtype = dataset_label.getDataType();

> dataset_label.read(h5_data->label ,dtype ,memspace_l, dataspace_l); 

> 

> I then replace "None\0" with a variable length strings(ranging from 3-35

> chars in each end with null terminator) in char* Label_buf and want to

> over-write these new strings in the dataset, but when I use the c++ example

> varlen.cpp :

> 

> H5::StrType tid1(0, H5T_VARIABLE);

> dataset_label.write((void*)Label_buf,tid1);

> 

> I get a run-time error as follows:

> HDF5-DIAG: Error detected in HDF5 (1.8.6) thread 0:

>  #000: H5Dio.c line 266 in H5Dwrite(): can't write data

>    major: Dataset

>    minor: Write failed

>  #001: H5Dio.c line 541 in H5D_write(): unable to set up type info

>    major: Dataset

>    minor: Unable to initialize object

>  #002: H5Dio.c line 836 in H5D_typeinfo_init(): unable to convert between

> src and dest datatype

>    major: Dataset

>    minor: Feature is unsupported

>  #003: H5T.c line 4449 in H5T_path_find(): no appropriate function for

> conversion path

>    major: Datatype

>    minor: Unable to initialize object

> 

> 

> if I do 

> H5::DataType dtype = dataset_label.getDataType();

> dataset_label.read(h5_data->label ,dtype ,memspace_l, dataspace_l);

> 

> it doesn't throw an error but the written string in the dataset is totally

> messed-up.

> Can anyone please tell me what is the write way to over-write my

> variable-length strings or any alternative?

> Thank you so much in advance

        When you write a variable-length string, you need to pass a pointer to 
the 'char *' for the write operation.  Take a look at the testing code in 
test/tvlstr.c for examples of this in C.


        Quincey




_______________________________________________

Hdf-forum is for HDF software users discussion.

[hidden email]

http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

        
        

        

        
        
                If you reply to this email, your message will be added to the 
discussion below:
                
http://hdf-forum.184993.n3.nabble.com/over-writing-variable-length-string-in-dataset-using-hdf5-C-API-tp3219658p3259705.html
        
        
                
                To unsubscribe from over-writing variable length string in 
dataset using hdf5 C++ API, click here.
        

--
View this message in context: 
http://hdf-forum.184993.n3.nabble.com/over-writing-variable-length-string-in-dataset-using-hdf5-C-API-tp3219658p3259968.html
Sent from the hdf-forum mailing list archive at Nabble.com.
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to