/** * Appends row to table described by provided SNPTab datastructure. */ void snp_tab_append_row(SNPTab *tab, SNP *data) { herr_t status; hsize_t n_to_write; n_to_write = 1; /* status = H5TBappend_records(tab->h5file, tab->name, */ /* n_records, tab->record_size, */ /* tab->field_offset, tab->field_size, */ /* data); */ status = H5TBwrite_records(tab->h5file, tab->name, tab->n_record, n_to_write, tab->record_size, tab->field_offset, tab->field_size, data); tab->n_record += 1; if(status < 0) { my_err("%s:%d: failed to write record to SNP table\n", __FILE__, __LINE__); } }
int main( void ) { Particle dst_buf[NRECORDS]; /* Calculate the size and the offsets of our struct members in memory */ size_t dst_size = sizeof( Particle ); size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ), HOFFSET( Particle, lati ), HOFFSET( Particle, longi ), HOFFSET( Particle, pressure ), HOFFSET( Particle, temperature )}; Particle p = {"zero",0,0, 0.0f, 0.0}; size_t dst_sizes[NFIELDS] = { sizeof( p.name), sizeof( p.lati), sizeof( p.longi), sizeof( p.pressure), sizeof( p.temperature)}; /* Fill value particle */ Particle fill_data[1] = { {"no data",-1,-1, -99.0f, -99.0} }; hid_t field_type[NFIELDS]; hid_t string_type; hid_t file_id; hsize_t chunk_size = 10; hsize_t start; /* Record to start reading/writing */ hsize_t nrecords; /* Number of records to read/write */ herr_t status; int i; /* Define 2 new particles to write */ Particle particle_in[NRECORDS_WRITE] = { {"zero",0,0, 0.0f, 0.0}, {"one",10,10, 1.0f, 10.0} }; /* Initialize the field field_type */ string_type = H5Tcopy( H5T_C_S1 ); H5Tset_size( string_type, 16 ); field_type[0] = string_type; field_type[1] = H5T_NATIVE_INT; field_type[2] = H5T_NATIVE_INT; field_type[3] = H5T_NATIVE_FLOAT; field_type[4] = H5T_NATIVE_DOUBLE; /* Create a new file using default properties. */ file_id = H5Fcreate( "h5_table_03.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ); /* Make the table */ status=H5TBmake_table( "Table Title", file_id, TABLE_NAME, NFIELDS, NRECORDS, dst_size, field_names, dst_offset, field_type, chunk_size, fill_data, 0, /* no compression */ NULL ); /* no data written */ /* Overwrite 2 records starting at record 0 */ start = 0; nrecords = NRECORDS_WRITE; status = H5TBwrite_records (file_id, TABLE_NAME, start, nrecords, dst_size, dst_offset, dst_sizes, particle_in); /* read the table */ status = H5TBread_table (file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf); /* print it by rows */ for (i=0; i<NRECORDS; i++) { printf ("%-5s %-5d %-5d %-5f %-5f", dst_buf[i].name, dst_buf[i].lati, dst_buf[i].longi, dst_buf[i].pressure, dst_buf[i].temperature); printf ("\n"); } /* close type */ H5Tclose( string_type ); /* close the file */ H5Fclose( file_id ); return 0; }