2012-06-24 36 views
6

Tôi đã tự hỏi nếu có một công cụ có thể sản xuất C HDF5 đọc và viết mã từ cấu trúc dữ liệu C.HDF5 Mã C thế hệ

Tôi muốn công cụ đó phân tích cú pháp tệp tiêu đề C và tạo mã đọc/ghi C HDF5 tương ứng.

Người ta có thể phân biệt trường hợp phân bổ tĩnh và phân bổ động. Lần đầu tiên, tôi chỉ quan tâm đến phân bổ tĩnh.

Ví dụ, tôi muốn tạo mã sau đây từ định nghĩa của cấu trúc sensor_t, có chứa một int và hai đôi. Mã được hiển thị là chuyển đổi trực tiếp của cấu trúc typedef C thành cấu trúc C HDF5.

typedef struct { 
    int  serial_no; 
    double temperature; 
    double pressure; 
} sensor_t; 

#include "hdf5.h" 
hid_t memtype; 
herr_t  status; 
memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t)); 
status = H5Tinsert (memtype, "serial_no", HOFFSET (sensor_t, serial_no), H5T_NATIVE_INT); 
status = H5Tinsert (memtype, "temperature", HOFFSET (sensor_t, temperature), H5T_NATIVE_DOUBLE); 
status = H5Tinsert (memtype, "pressure",  HOFFSET (sensor_t, pressure), H5T_NATIVE_DOUBLE); 


sensor_t wdata[1]; 
status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata); 
status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata); 

Tôi đã nhìn vào các trang web HDF mà không thành công

http://www.hdfgroup.org

Tôi biết một số người đã cố gắng cho HDF4 với một kịch bản Perl

http://www.srl.caltech.edu/ACE/ASC/exhdfgen/index.htm

Trả lời

2

Thú vị. Trong đất của NetCDF có "ncgen". NetCDF-4 giới thiệu ý tưởng về các loại hợp chất. NetCDF4 cũng có thể sử dụng định dạng tệp HDF5 làm định dạng vùng chứa cơ bản.

Vì vậy, nó sẽ không mất một tập tin header C, nhưng 'CDL' đánh dấu là khá đơn giản:

netcdf demo { 
types: 
    compound mything { 
    int id ; 
    double d1 ; 
    double d2 ; 
    }; // mything 
dimensions: 
     d1 = 1 ; 
variables: 
     mything v1(d1) ; 

// global attributes: 

Sau đó, bạn có thể làm cho mã netcdf C ra khỏi đó:

ncgen -c mine.cdl 

Nó không chính xác những gì bạn muốn. Nó không thực sự là những gì bạn muốn, nhưng nó có lẽ là gần nhất bạn có thể nhận được ngay bây giờ.

Các vấn đề liên quan