-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHDF5Helper.jl
51 lines (37 loc) · 1.42 KB
/
HDF5Helper.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
module HDF5Helper
using HDF5
function create_file_group!(file::HDF5.File, group_name::String)
create_group(file, group_name);
end
# creates 1D dataset
function create_dataset!(file::HDF5.File, group_name::String, dataset_name::String, datatype::DataType, chunk_size::Int)
create_dataset(file[group_name], dataset_name, datatype, ((0,),(-1,)), chunk = (chunk_size,));
end
# appends 1D data to 1D dataset
function append_data!(file::HDF5.File, group_name::String, dataset_name::String, data::Vector{Float64}, len_data::Int)
d = file[group_name][dataset_name];
current_size = length(d);
HDF5.set_extent_dims(d, (current_size+len_data,));
d[current_size+1:current_size+len_data] = data;
end
# appends float to 1D dataset
function append_data!(file::HDF5.File, group_name::String, dataset_name::String, data::Float64)
d = file[group_name][dataset_name];
current_size = length(d);
HDF5.set_extent_dims(d, (current_size+1,));
d[current_size+1] = data;
end
end
#= Example usage
fname = tempname(); # temporary file
file = h5open(fname, "w")
group_name = "group1";
create_file_group!(file, group_name);
dataset_name = "dataset1";
chunk_size = 100;
create_dataset!(file, group_name, dataset_name, Float64, chunk_size);
chunk = rand(Float64, chunk_size) # Example chunk data
@time append_data!(file, group_name, dataset_name, chunk, chunk_size)
file[group_name][dataset_name][101:end] == chunk
close(file)
=#