Чтобы разрешить совместное использование файлов HDF5 с несколькими локалями, MATLAB® поддерживает использование символов, отличных от ASCII, в файлах с HDF5. В этом примере показано, как:
Создайте файлы HDF5, содержащие имена набора данных и атрибутов, которые имеют символы, отличные от ASCII, используя функции высокого уровня.
Создайте наборы строковых наборов данных переменной длины, содержащие символы, отличные от ASCII, используя низкоуровневые функции.
Создайте файл HDF5, содержащий имя набора данных и имя атрибута, который содержит символы, отличные от ASCII. Чтобы проверить, как ожидалось, отображаются ли имена набора данных и атрибутов, запишите данные в набор данных и отобразите информацию о файле.
Создайте набор данных с именем (/数据集
), который включает символы, отличные от ASCII.
dsetName = ['/' char([25968 25454 38598])]; dsetDims = [5 2]; h5create('outfile.h5',['/grp1' dsetName],dsetDims,... 'TextEncoding','UTF-8');
dataToWrite = rand(dsetDims); h5write('outfile.h5',['/grp1' dsetName],dataToWrite);
Создайте имя атрибута (屬性名稱
), который включает символы, отличные от ASCII, и присваивает значение атрибуту.
attrName = char([25967 25453 38597]); h5writeatt('outfile.h5','/',attrName,'I am an attribute',... 'TextEncoding','UTF-8');
Отобразите информацию о файле и проверьте, правильно ли отображаются имя атрибута и имя набора данных.
h5disp('outfile.h5')
HDF5 outfile.h5 Group '/' Attributes: '/屬性名稱': 'I am an attribute' Group '/grp1' Dataset '数据集' Size: 5x2 MaxSize: 5x2 Datatype: H5T_IEEE_F64LE (double) ChunkSize: [] Filters: none FillValue: 0.000000
Создайте набор строковых наборов данных переменной длины для хранения данных, содержащих символы, отличные от ASCII, с помощью низкоуровневых функций. Запишите данные в набор данных. Проверьте, правильно ли записаны данные.
Создайте данные, содержащие символы, отличные от ASCII.
dataToWrite = {char([12487 12540 12479]) 'hello' ... char([1605 1585 1581 1576 1575]); ... 'world' char([1052 1080 1088]) ... char([954 972 963 956 959 962])}; disp(dataToWrite)
'データ' 'hello' 'مرحبا' 'world' 'Мир' 'κόσμος'
Чтобы записать эти данные в файл, создайте файл HDF5, задайте имя группы и имя набора данных в группе.
Создайте файл HDF5.
fileName = 'outfile.h5'; fileID = H5F.create(fileName,'H5F_ACC_TRUNC',... 'H5P_DEFAULT', 'H5P_DEFAULT');
Чтобы создать группу, содержащую символы, отличные от ASCII, в ее имени, сначала настройте свойство создания ссылок.
lcplID = H5P.create('H5P_LINK_CREATE'); H5P.set_char_encoding(lcplID,H5ML.get_constant_value('H5T_CSET_UTF8')); plist = 'H5P_DEFAULT';
Затем создайте группу (グループ
).
grpName = char([12464 12523 12540 12503]); grpID = H5G.create(fileID,grpName,lcplID,plist,plist);
Создайте набор данных, который содержит строковые данные переменной длины с символами, отличными от ASCII. Сначала сконфигурируйте его тип данных.
typeID = H5T.copy('H5T_C_S1'); H5T.set_size(typeID,'H5T_VARIABLE'); H5T.set_cset(typeID,H5ML.get_constant_value('H5T_CSET_UTF8'));
Теперь создайте набор данных, указав его имя, тип данных и размерности.
dsetName = 'datasetUtf8'; dataDims = [2 3]; h5DataDims = fliplr(dataDims); h5MaxDims = h5DataDims; spaceID = H5S.create_simple(2,h5DataDims,h5MaxDims); dsetID = H5D.create(grpID,dsetName,typeID,spaceID,... 'H5P_DEFAULT','H5P_DEFAULT','H5P_DEFAULT');
Запишите данные в набор данных.
H5D.write(dsetID,'H5ML_DEFAULT','H5S_ALL',... 'H5S_ALL','H5P_DEFAULT',dataToWrite);
Считайте данные назад.
dataRead = h5read('outfile.h5',['/' grpName '/' dsetName])
dataRead = 2×3 cell array {'データ'} {'hello'} {'مرحبا' } {'world'} {'Мир' } {'κόσμος'}
Проверьте, соответствуют ли данные в файле записанным данным.
isequal(dataRead,dataToWrite)
ans = logical 1
Закройте идентификаторы.
H5D.close(dsetID); H5S.close(spaceID); H5T.close(typeID); H5G.close(grpID); H5P.close(lcplID); H5F.close(fileID);
H5A.get_name
| h5create
| h5disp
| H5I.get_name
| h5info
| H5L.get_name_by_idx
| H5L.get_val
| H5R.get_name
| h5writeatt