Чтобы позволить совместно использовать файлов HDF5 из нескольких локалей, MATLAB® поддерживает использование символов non-ASCII в файлах HDF5. Этот пример показывает вам как:
Создайте файлы HDF5, содержащие набор данных и названия атрибута, которые имеют символы non-ASCII с помощью высокоуровневых функций.
Создайте наборы данных строки переменной длины, содержащие символы non-ASCII с помощью низкоуровневых функций.
Создайте файл HDF5, содержащий имя набора данных и название атрибута, которое содержит символы non-ASCII. Чтобы проверять, появляются ли набор данных и названия атрибута как ожидалось, запишите данные к набору данных и отобразите информацию о файле.
Создайте набор данных с именем (/数据集
), который включает символы non-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);
Создайте название атрибута (屬性名稱
), который включает символы non-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
Создайте набор данных строки переменной длины, чтобы хранить данные, содержащие символы non-ASCII с помощью низкоуровневых функций. Запишите данные в набор данных. Проверяйте, записаны ли данные правильно.
Создайте данные, содержащие символы non-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');
Чтобы создать группу, содержащую символы non-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);
Создайте набор данных, который содержит данные строки переменной длины с символами non-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
| H5I.get_name
| H5L.get_name_by_idx
| H5L.get_val
| H5R.get_name
| h5create
| h5disp
| h5info
| h5writeatt