Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 12

Работа с файлами .h5 (HDF5), в которых хранятся данные о звуковой волне

28.08.2014, 13:58. Показов 6194. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте!
уже неделю пытаюсь найти информацию о работе с файлами *.h5 (HDF5) в c#.
Задача: имеется *.h5 - файл, в котором хранятся данные о звуковой волне. Необходимо написать приложение, которое открывает файл, считывает оттуда данные и сохраняет их для последующей обработки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HDF5DotNet;
 
namespace ConsoleApplication2
{
    class Program
    {
 
 
        static void Main(string[] args)
        {
            H5.Open();
            H5FileId file = H5F.open("TEST_SINUS.h5", H5F.OpenMode.ACC_RDONLY);
 
            H5F.close(file);
        }
    }
}
А как добраться до самих данных? Если я правильно поняла, для этого нужно для начала знать datasetName. Можно ли его как-то получить? Может быть, существует какая-нибудь документация типа MSDN?
Буду очень признательна за помощь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2014, 13:58
Ответы с готовыми решениями:

Работа стандартной аутентификации ASP.NET MVC 3: где хранятся все эти данные
Здравствуйте, возник вопрос как работает стандартный AccountController в MVC 3(при создании проекта на MVC 3 есть опция с регистриционным...

Для 7 человек, среди которых есть мужчины и женщины, хранятся следующие данные: имя, пол (true - мужской, false - женский), рост.Опишите логическую ф
условие: Для 7 человек, среди которых есть мужчины и женщины, хранятся следующие данные: имя, пол (true - мужской, false - женский),...

Как передавать данные, в которых больше 1 строки между двумя ASP файлами?
kak peredavat' dannyje, kotoryx bolse 1 stroki mezdu 2 asp fajlami?

4
5 / 5 / 4
Регистрация: 01.06.2014
Сообщений: 55
29.08.2014, 17:05
samolet2415, а на сайте той библиотеки, что вы используете, искали?
Вот он, кстати. Там есть скупая фак'юшечка и описание классов и структур.
0
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 12
29.08.2014, 17:14  [ТС]
да, как раз наткнулась на него вчера. Пытаюсь теперь там найти что-то. Описание действительно скудновато...
0
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 12
02.09.2014, 11:28  [ТС]
ну вот, кое-какую информацию нашла. но теперь вопросов еще больше...
для работы сначала создаю HDF5-файл, в который записываю данные в виде матрицы.
если я хочу считать данные, то мне нужно открыть Dataset, в котором они находятся.
тут возникает первый вопрос:
как пределить кол-во элементов в группе я нашла, и как определить их названия тоже. но вот как определить, какой из элементов является группой, а какой Dataset?
дальше я пытаюсь прочитать только определенный кусок данных (методом readPart(int start, int end)).
если матрица одномерная, то метод работает. но только в том случае, если я считываю данные с первого элемента (start = 0). если же я хочу считать 50 елементов, начиная, например, с 5-го, то тут уже проблема.
считать определенный кусок данных из двумерной матрицы у меня вообще не получается. ошибку не выбрасывает, но таблица на выходе пустая.
и еще возник вопрос: у меня, например, данные хранятся в таблице 5х5 и мне надо считать только второй столбик. прочитала, что надо для этого установить шаг (stride в методе H5Sselect_hyperslab). но у меня почему-то не получается...
C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HDF5DotNet;
 
namespace Beispiel_2
{
    class Program
    {
        static void Main(string[] args)
        {
            //размер матрицы 
            int dim = 2;
            //количество элементов
            int elem = 100;
            Program probe = new Program();
            probe.create(dim, elem);
            probe.read(dim, elem);
            probe.readPart(0, 50);
        }
 
 
        public void create(int dim, int elem)
        {
            H5FileId file = H5F.create("myCSharp.h5", H5F.CreateMode.ACC_TRUNC);
            H5GroupId groupId = H5G.create(file, "/cSharpGroup");
            H5GroupId subGroup = H5G.create(groupId, "mySubGroup");
            H5G.close(subGroup);
            long[] dims = new long[dim];
            dims[0] = elem;
            dims[1] = elem;
            
            int[,] dset_data = new int[dim, elem];
            int variable = 10;
            
            for (int i = 0; i < dim; i++)
            {
                for (int j = 0; j < elem; j++)
                {
                    dset_data[i, j] = variable;
                    variable++;
                }
            }
            H5DataSpaceId spaceId = H5S.create_simple(dim, dims);
            H5DataTypeId typeId = H5T.copy(H5T.H5Type.NATIVE_INT);
            H5DataSetId dataSetId = H5D.create(file, "/csharpExample",
                                              typeId, spaceId);
            H5D.write(dataSetId, new H5DataTypeId(H5T.H5Type.NATIVE_INT),
                              new H5Array<int>(dset_data));
            H5D.close(dataSetId);
            H5S.close(spaceId);
            H5T.close(typeId);
            H5G.close(groupId);
            H5F.close(file);
 
        }
 
        public void read(int dim, int elem)
        {
            H5FileId file = H5F.open("myCSharp.h5", H5F.OpenMode.ACC_RDONLY);
 
            H5GroupId root = H5G.open(file, "/");
            //определяю количество элементов в группе. 
            long elementeRoot = H5G.getNumObjects(root);
            string[] elementeInWurzel = new string[elementeRoot];
            //дальше можно определить название элементов.
            for (int i = 0; i < elementeRoot; i++)
            {
                string obj_name = H5L.getNameByIndex(file, "/", H5IndexType.NAME, H5IterationOrder.NATIVE, i);
                elementeInWurzel[i] = obj_name;
            }
            Console.WriteLine("Root-Gruppe:");
            foreach (string s in elementeInWurzel)
            {
                Console.Write(s + "  ");
            }
            Console.WriteLine();
 
            //чтобы добраться непосредственно до данных, надо открыть Dataset,
            //в котором они лежат, ну и дальше. 
            var dataset = H5D.open(file, "/csharpExample");
            var dataspace = H5D.getSpace(dataset);
            var size = H5S.getSimpleExtentDims(dataspace);
 
            int[,] readDataBack = new int[size[0], dim];
            H5D.read(dataset, new H5DataTypeId(H5T.H5Type.NATIVE_INT),
                new H5Array<int>(readDataBack));
            H5D.close(dataset);
            H5S.close(dataspace);
            H5F.close(file);
 
            for (int i = 0; i < elem; i++)
            {
                for (int j = 0; j < dim; j++)
                {
                    Console.Write(readDataBack[i, j] + "  ");
                }
                Console.WriteLine();
            }
        }
 
        //считываю часть данных из массива
        public void readPart(int start, int cnt)
        {
            H5FileId file = H5F.open("myCSharp.h5", H5F.OpenMode.ACC_RDONLY);
            var dataset = H5D.open(file, "/csharpExample");
            var dataspace = H5D.getSpace(dataset);
            var size = H5S.getSimpleExtentDims(dataspace);
            //для одномерного массива все вроде бы работает.
            //для двумерного на выходе пустой массив (нули выдает)
            //сеорее всего, что-то не так с размерами матриц.
            //но не понимаю, что конкретно
            long[] offset = new long[1];
            offset[0] = start;
            long[] count = new long[1];
            count[0] = cnt;
            long[] memSpaceDims = new long[1];
            memSpaceDims[0] = (cnt + 1);
            //Create new space to read hyperslab in memory
            H5DataSpaceId memspaceid = H5S.create_simple(1, memSpaceDims);
            //select hyperslabs in dataspace
            H5S.selectHyperslab(memspaceid, H5S.SelectOperator.SET, offset, count);
            H5S.selectHyperslab(dataspace, H5S.SelectOperator.SET, offset, count);
            //array to read data
            int[] readDataBack = new int[cnt];
            H5DataTypeId typeId = new H5DataTypeId(H5T.H5Type.NATIVE_INT);
            //Read data from dataset 
            H5D.read(dataset, typeId, memspaceid, dataspace,
                      new H5PropertyListId(new H5P.Template()), new H5Array<int>(readDataBack));
            // Close all the open resources.
            H5D.close(dataset);
            H5F.close(file);
            Console.WriteLine();
            foreach (int x in readDataBack)
            {
                Console.Write(x + "   ");
            }
            Console.WriteLine();
        }
    }
}
0
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 12
03.09.2014, 15:48  [ТС]
с первым вопросом кое-как разобралась.
пишу свой вариант на случай, если кому-то еще понадобится
(может быть, это "из пушки по воробьям", но другого варианта пока нет...)
C#
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
 public void myMethod()
        {
            H5FileId file = H5F.open("Tabelle.h5", H5F.OpenMode.ACC_RDONLY);
            H5GroupId root = H5G.open(file, "/");
            long cntRoot = H5G.getNumObjects(root);
            string[] elemRoot = new string[cntRoot];
            for (int i = 0; i < cntRoot; i++)
            {
                string obj_name = H5L.getNameByIndex(root, ".", H5IndexType.NAME, H5IterationOrder.NATIVE, i);
                H5ObjectInfo info = H5O.getInfoByIndex(file, ".", H5IndexType.NAME, H5IterationOrder.NATIVE, i);
                string type = info.objectType.ToString();
                string s = obj_name + " - " + type;
                elemRoot[i] = s;
                Console.WriteLine(s);
                if (info.objectType.Equals(H5ObjectType.GROUP))
                {
                    H5GroupId gr = H5G.open(root, obj_name);
                    long cntGroup = H5G.getNumObjects(gr);
                    string[] elemGroup = new string[cntGroup];
                    for (int j = 0; j < cntGroup; j++)
                    {
                        string obj_name1 = H5L.getNameByIndex(gr, ".", H5IndexType.NAME, H5IterationOrder.NATIVE, j);
                        H5ObjectInfo inf = H5O.getInfoByIndex(gr, ".", H5IndexType.NAME, H5IterationOrder.NATIVE, j);
                        string t = inf.objectType.ToString();
                        string s1 = obj_name1 + " - " + t;
                        elemGroup[j] = s1;
                        
                    }
                    foreach (string k in elemGroup)
                    {
                        Console.WriteLine("->" + k);
                    }
                }
            }
            H5G.close(root);
            H5F.close(file);
        }
оставшиеся вопросы, к сожалению, не поддаются
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2014, 15:48
Помогаю со студенческими работами здесь

Работа с файлами, количество которых задает пользователь
Есть задание В командной строке задаются N&lt;= 5 имен файлов и строка . Вывести в указанные файлы N символов из строки в порядке убывания...

Работа с файлами: вывести студентов 1 и 2 курса, у которых рейтинг меньше 3
Ребята, помогите пожалуйста, задания вроде не сложные, но я ничерта не могу понять в работе с файлами. Хоть на примере гляну. 1....

Создание и работа с типизированными файлами,строки которых имеют типь запись
Помогите пожалуйста создать программу,не особо разобралась с этой темой и не могу понять как вычисляется суммарное кол-во денег. Файл...

Qdesktopservice::openurl - некорректная работа с файлами, в пути которых содержится кириллица
Вопрос заключается в следующем если я открываю файл полный путь которого содержит русские буквы файл не открывается ...

Работа с файлами(открыть файл, считать данные в double массив)
Доброго времени суток всем! Столкнулся с проблемой при написании проги. Вот что требуется: 1)Открыть файл 2)Считать данные в массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru