Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163

Чтение MATLAB файлов

25.07.2013, 18:11. Показов 6805. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть несколько .mat файлов в которых содержатся различные параметры: числа, массивы чисел размером до 1000х1000. Необходимо оперировать данными параметры в C#, отсюда возникает вопрос как подключить сами файлы, а затем вызывать нужные параметры?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2013, 18:11
Ответы с готовыми решениями:

Чтение переменных из Matlab
Здравствуйте! Работаю с матлабом в c#. В матлабе есть функция, которая принимает входные аргументы из программы на c#,обрабатывает их и...

Чтение COM-порта в Matlab
Здравствуйте. что-то не получается организовать чтение данных с ком порта в matlab. то, что данные поступают - это точно, проверялось с...

Чтение из txt файла в MatLab
Необходимо из файла word.txt, содержание которого примерно: получить строковый массив ячеек word = {'конь', 'три',...

44
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
05.08.2013, 09:12  [ТС]
Студворк — интернет-сервис помощи студентам
Еще один глупый вопрос, я по описываю путь к файлу, после компиляции он копируется в папку к экзэшнику и если я перенесены программу на другой компьютер все нормально откроется?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
05.08.2013, 11:36
ZaStalim, если установлен .NET, DLL csmatio доступна для загрузки/использования (рядом с приложением, или через ресурсы) и всё правильно написано, то да - проблем возникнуть не должно.
1
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
12.08.2013, 21:56  [ТС]
Дошли руки, разобрался с вашим примером, спасибо большое. Но тут же возникли вопросы: при попытке получить новый массив путем умножения всех элементов считанного на 10 ничего не вышло, так же как я понял полученный массив не будет виден за пределами условного оператора if. Отсюда возникает ряд вопросов: необходимо сделать два метода для считывания одномерного и двумерного массива, входной величиной для которых будет название переменной (mlArray.name), т.е. как бы избавиться от if. Если же от if не избавить тогда наверно конструкцию else-if придется применять., а возвращать эти методы будут соответственно либо массив Array[], либо Array[,] , чтобы уже в основной программе я мог ими оперировать как обычными массивами.
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
using System;
using System.IO;
using csmatio.io;
using csmatio.types;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main ( string[] args )
        {
            string filePath = "";
 
            if ( args.Length == 1 )
                filePath = args[0];
            else
            {
                /* Раскомментировать если нужен ввод пути к файлу.
                 * Еесли не раскомментировать, то будет браться файл
                 * SFB__vector__SFB.mat.b в папке с приложением */
 
                // filePath = QueryUserFilePath();
 
                if ( !File.Exists( filePath ) )
                    filePath = QueryDefaultFilePath();
            }
 
            if ( !File.Exists( filePath ) )
            {
                Console.WriteLine( "Файл \"{0}\" не найден!", filePath );
                return;
            }
 
            Console.WriteLine( "Путь к файлу: " + filePath );
            Console.WriteLine();
 
            try
            {
                MatFileReader matReader = new MatFileReader( filePath );
 
                foreach ( MLArray mlArray in matReader.Data )
                {
                    // Выведет полную информацию о массиве
                    //Console.WriteLine( "Тип: " + mlArray.GetType() );
                    //Console.WriteLine( mlArray.ContentToString() );
 
                    // Читаем информацию для файла SFB__vector__SFB.mat.b
                    // а именно структуру которая на скриншоте:
                    // [url]https://www.cyberforum.ru/attachments/294541d1374769670[/url]
                    if ( mlArray.Name == "unnamed1CopyCopyCopy" )
                    {
                        /* Элемент unnamed1CopyCopyCopy представляет из себя 
                         * двумерный массив типа double, конвертируем к структуре
                         * указанного типа. Все типы можно посмотреть в папке
                         * CSMatIO\src\types библиотеки CSMatIO */
                        MLDouble arr = (MLDouble)mlArray;
                        // Получаем значения массива из типа MLDouble - double[][]
                        double[][] dblArr = arr.GetArray(); //Этот Массив же не будет виден запределами оператора if 
                        int n= dblArr.GetLength(0);
                        int m =dblArr.GetLength(1);
                        double [][] dblArr10 = new double[n][m];
                        for(int i = 0;i<n;i++)
                        {
                            for(int j=0;j<m;j++)
                            {
                                dblArr10[i][j]= dblArr[i][j]*10;
                            }
                        }
 
                        foreach ( double[] line in dblArr10 )
                        {
                            foreach ( double value in line )
                            {
                                Console.Write( value + "\t" );
                            }
 
                            Console.WriteLine();
                        }
                    }
                }
            }
            catch ( Exception ex )
            {
                Console.WriteLine( "Ошибка времени выполнения: " );
                Console.WriteLine( ex );
            }
 
            Console.WriteLine( "Нажмите любую клавишу для завершения..." );
            Console.ReadKey();
        }
 
        static string QueryUserFilePath ( )
        {
            Console.WriteLine( "Введите путь к файлу: " );
            return Console.ReadLine();
        }
 
        /// <returns>Возвращает путь к файлу "SFB__vector__SFB.mat.b"</returns>
        static string QueryDefaultFilePath ( )
        {
            return Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "SFB__vector__SFB.mat.b" );
        }
    }
}
Добавлено через 9 часов 2 минуты
Попробывал сделать вот такой класс, пишет: Внедренный оператор не может быть объявлением или оператором с идентификатором.

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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
using System;
using System.IO;
using csmatio.io;
using csmatio.types;
using System.Collections;
 
namespace osen
{
    /// <summary>
    /// Description of Class1.
    /// </summary>
    public class kuks
    {
        
        public static double[] Double2DToDouble( double[][] dd )
        {
            double[] d = new double[ dd.Length*dd[0].Length ];
            for( int n = 0; n < dd[0].Length; n++ )
            {
                for( int m = 0; m < dd.Length; m++ )
                {
                    d[m+n*dd.Length] = dd[m][n];
                }
            }
            return d;
        }
        public double[] kuks_read(string valuename)
        {
            ArrayList al=new ArrayList();
            string filePath = "";
            if ( args.Length == 1 )
                filePath = args[0];
            else
            {
                    if ( !File.Exists( filePath ) )
                    filePath = QueryDefaultFilePath();
            }
 
            if ( !File.Exists( filePath ) )
            {
                Console.WriteLine( "Файл \"{0}\" не найден!", filePath );
                return;
            }
 
            Console.WriteLine( "Путь к файлу: " + filePath );
            Console.WriteLine();
 
          
                MatFileReader matReader = new MatFileReader( filePath );
 
                foreach ( MLArray mlArray in matReader.Data )
                {
                    mlArray.Name=valuename;
                     if ( mlArray.Name == "f15h0v0_8wffi15" )
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h0v0_8wffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h0v1_4ffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h0v1_4ffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h10v0_8wffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h10v0_8wffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h10v1_4ffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h10v1_4ffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h15v0_8wffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h15v0_8wffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h15v1_4ffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h15v1_4ffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h5v0_8wffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h5v0_8wffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h5v1_4ffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "f15h5v1_4ffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "mig29h10v1_4ffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "mig29h3v0_8wffi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "mig29h3v0_8wffi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi0")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi10")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi15")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi150")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi165")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                     else if (mlArray.Name == "su27h5fi5")
                        MLDouble arr = (MLDouble)mlArray;
                        double[][] dblArr1 = arr.GetArray(); 
                        double[] dblArr = Double2DToDouble(dblArr1);
                        int n= dblArr.Length;
                        for(int i = 0;i<n;i++)
                        {
                            al.Add(dblArr[i]);
                        }
                       
                }     
                    double [] ia = (double[]) al.ToArray(typeof(double));    
                    return ia;
                 }
        
           //////////////////////////////////////////////////
            static string QueryUserFilePath ( )
        {
            Console.WriteLine( "Введите путь к файлу: " );
            return Console.ReadLine();
        }
 
        /// <returns>Возвращает путь к файлу "SFB__vector__SFB.mat.b"</returns>
        static string QueryDefaultFilePath ( )
        {
            return Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "kuks.mat." );
        }  
        
                    
        }
                                                                         
         
    }
Добавлено через 34 минуты
тут надо было {} поставить везде, ладно но новые ошибки:
1)Имя 'args' отсутствует в текущем контексте (CS0103) -line 31,32
2)Невозможно присвоить значение свойству или индексатору 'csmatio.types.MLArray.Name' -- доступ только для чтения (CS0200)-line 53 (это понятно но незнаю как по другому реализовать такой алгоритм)
3)Требуется объект с типом, приводимым к 'double[]' (CS0126)-line 42
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
14.08.2013, 22:34
Цитата Сообщение от ZaStalim Посмотреть сообщение
массив не будет виден за пределами условного оператора if
В чем проблема вынести массив за его пределы?
Цитата Сообщение от ZaStalim Посмотреть сообщение
Невозможно присвоить значение свойству или индексатору 'csmatio.types.MLArray.Name'
Цитата Сообщение от ZaStalim Посмотреть сообщение
Требуется объект с типом, приводимым к 'double[]'
Цитата Сообщение от ZaStalim Посмотреть сообщение
Имя 'args' отсутствует в текущем контексте
Настоятельно рекомендую прочитать какую-нибудь литературу по C#/программированию, иначе у меня с Вами диалог не сложиться, да и у Вас с компилятором тоже.

Конкретно по коду вообще сложно сказать что Вам требуется.
Все Ваши if-else можно переписать с использованием массива и проверки вхождения строки в массив.
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
14.08.2013, 23:00  [ТС]
Ну в принципе можно объявить динамический массив затем преобразовать в обычный, литературу то читаю но там обычно все на слишком простых и явных примерах а то что не понятно обычно нет(не могли бы вы пояснить пожалуйста как от ошибки с args избавиться) и как else if заменить я не понял: я хотел сделать так чтобы при вызове метода входной величиной было название переменной в файле с названием указанным в конце класса, т.е. Проверку осуществлять через mlarray.name а он только read, вы тоже поймите уж для новичка вдвойне сложнее разобраться в работе данной библиотеке и некоторые вещи в ней вообще непонятны.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
14.08.2013, 23:28
Цитата Сообщение от ZaStalim Посмотреть сообщение
не могли бы вы пояснить пожалуйста как от ошибки с args избавиться
А где у Вас объявление args в код? (Вам об этом явно намекает компилятор описывая ошибку)
Посмотрите мой пример (или код чуть выше Вашего) и где идёт объявление args, и вообще что оно из себя представляет.
Цитата Сообщение от ZaStalim Посмотреть сообщение
как else if заменить я не понял
Объясните мне как должен происходить поиск и тогда поясню.
Цитата Сообщение от ZaStalim Посмотреть сообщение
с названием указанным в конце класса

Цитата Сообщение от ZaStalim Посмотреть сообщение
Проверку осуществлять через mlarray.name а он только read
Почему Вы пытаетесь писать mlArray.Name если хотите осуществлять проверку?

Странно что в книгах для Вас примитивно, однако примитивный цикл с проверкой Вы реализовать не можете.

Цитата Сообщение от ZaStalim Посмотреть сообщение
C#
1
2
mlArray.Name=valuename;
if ( mlArray.Name == "f15h0v0_8wffi15" )
Здесь вообще не понятно что происходит. По Вашей логике Вы хотите найти элемент с именем valuename, однако при этом Вы не сравниваете его с прочитанным из файла, т.е. динамическими данными, а сравниваете с константными значениями, т.е. они как бы заранее известны, но что сделать Вы хотите я так и не понял.
Требуется проверка valuename с mlArray.Name или с чем-то другим? Зачем Вы пытаетесь переназанчить имя mlArray.Name мне тоже не понятно.

Добавлено через 1 минуту
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
    class MatlabFileAnalyzer
    {
        private double[] Double2DToDouble ( double[][] dd )
        {
            double[] d = new double[dd.Length * dd[0].Length];
            for ( int n = 0; n < dd[0].Length; n++ )
            {
                for ( int m = 0; m < dd.Length; m++ )
                {
                    d[m + n * dd.Length] = dd[m][n];
                }
            }
            return d;
        }
 
        public double[] QueryData ( MatFileReader reader, string arrayName )
        {
            foreach ( MLArray mlArray in reader.Data )
            {
                if ( mlArray.Name == arrayName )
                {
                    return Double2DToDouble( ((MLDouble)mlArray).GetArray() );
                }
            }
 
            return null;
        }
    }
Это требуется?
Использование
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
static void Main ( string[] args )
        {
            string filePath = "";
 
            if ( args.Length == 1 )
                filePath = args[0];
            else
            {
                /* Раскомментировать если нужен ввод пути к файлу.
                 * Еесли не раскомментировать, то будет браться файл
                 * SFB__vector__SFB.mat.b в папке с приложением */
 
                // filePath = QueryUserFilePath();
 
                if ( !File.Exists( filePath ) )
                    filePath = QueryDefaultFilePath();
            }
 
            if ( !File.Exists( filePath ) )
            {
                Console.WriteLine( "Файл \"{0}\" не найден!", filePath );
                return;
            }
 
            Console.WriteLine( "Путь к файлу: " + filePath );
            Console.WriteLine();
 
            try
            {
                MatFileReader matReader = new MatFileReader( filePath );
                MatlabFileAnalyzer analyzer = new MatlabFileAnalyzer();
                analyzer.QueryData( matReader, "f15h0v0_8wffi15" );
            }
            catch ( Exception ex )
            {
                Console.WriteLine( "Ошибка времени выполнения: " );
                Console.WriteLine( ex );
            }
 
            Console.WriteLine( "Нажмите любую клавишу для завершения..." );
            Console.ReadKey();
        }
1
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
14.08.2013, 23:46  [ТС]
Вроде да, надо попробовать, а все это для того: в основной программе есть много условий в зависимости от которых определенный массив например одномерный io[] будет равен определенному массиву из mat файла.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.08.2013, 00:38
Цитата Сообщение от NickoTin Посмотреть сообщение
ZaStalim, не будет. Если Вы добавите проект (csproj) в решение (sln), то от этого ничего не поменяется, нужно сливать тогда Ваш основной код и код библиотек в один проект, чтобы не было зависимостей на эти библиотеки.
Вот способ добавления внешних .NET библиотек в проект чтобы не надо было их рядом таскать, они загружаются из памяти.
Есть менее извращенный вариант: ilMerge, бесплатно для некоммерческой деятельности.
0
15.08.2013, 01:46

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
Есть менее извращенный вариант: ilMerge, бесплатно для некоммерческой деятельности.
Пробовали собирать более менее большие солюшены из более чем 2 библиотек и приложения? Если собралось но не запускается долго будете втыкать в чем дело и пытаться решить проблему, оно нужно? Да и WPF не поддерживает.

1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.08.2013, 02:11
NickoTin, собирался применить к своему проекту, слить штук 20-25дллок, потом прочитал про некоммерческое использование и забил. Значит, продукт сыроват, я так понимаю?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
15.08.2013, 02:31
Цитата Сообщение от Psilon Посмотреть сообщение
слить штук 20-25дллок
Попробуйте, потом сообщите Давно его пробовал, был сыроват, сейчас вот попробовал собрать de4dot в один файл (.net 2, консольное приложение, 6 dll и 1 exe) - собралось нормально, хорошо если так всегда. Самое неприятное если соберётся нормально, но будет падать.
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
30.08.2013, 20:52  [ТС]
в классе на 16 строку ругается что-то с MatFileReader не нравиться ему
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.08.2013, 21:04
Код рабочий. Приложите хотя б описание ошибки как ругается...
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
30.08.2013, 21:37  [ТС]
Не удалось найти имя типа или пространства имен 'MatFileReader' (возможно, пропущена используемая директива или ссылка на сборку) (CS0246) - C:\Users\Admin\Documents\SharpDevelop Projects\matlab_test2\matlab_test2\Progr am.cs:28,38

Добавлено через 16 секунд
dll в ссылки добавил
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.08.2013, 21:43
Цитата Сообщение от ZaStalim Посмотреть сообщение
dll в ссылки добавил
А using ?
C#
1
using csmatio.io;
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
30.08.2013, 21:56  [ТС]
точно, забыл сорри =(

Добавлено через 6 минут
Имя 'QueryDefaultFilePath' отсутствует в текущем контексте (CS0103) - C:\Users\Admin\Documents\SharpDevelop Projects\matlab_test2\matlab_test2\Progr am.cs:65,32
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.08.2013, 21:59
http://msdn.microsoft.com/ru-r... baa6f.aspx
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
30.08.2013, 22:08  [ТС]
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
using System;
using System.IO;
using csmatio.io;
using csmatio.types;
 
namespace matlab_test2
{
    class MatlabFileAnalyzer
    {
        private double[] Double2DToDouble ( double[][] dd )
        {
            double[] d = new double[dd.Length * dd[0].Length];
            for ( int n = 0; n < dd[0].Length; n++ )
            {
                for ( int m = 0; m < dd.Length; m++ )
                {
                    d[m + n * dd.Length] = dd[m][n];
                }
            }
            return d;
        }
 
        public double[] QueryData (  MatFileReader reader , string arrayName )
        {
            foreach ( MLArray mlArray in reader.Data )
            {
                if ( mlArray.Name == arrayName )
                {
                    return Double2DToDouble( ((MLDouble)mlArray).GetArray() );
                }
            }
 
            return null;
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            double [] fd= new double[1000000];
                
                 string filePath = "";
 
            if ( args.Length == 1 )
                filePath = args[0];
            else
            {
                /* Раскомментировать если нужен ввод пути к файлу.
                 * Еесли не раскомментировать, то будет браться файл
                 * SFB__vector__SFB.mat.b в папке с приложением */
 
                // filePath = QueryUserFilePath();
 
                if ( !File.Exists( filePath ) )
                    filePath = QueryDefaultFilePath();
            }
 
            if ( !File.Exists( filePath ) )
            {
                Console.WriteLine( "Файл \"{0}\" не найден!", filePath );
                return;
            }
 
            Console.WriteLine( "Путь к файлу: " + filePath );
            Console.WriteLine();
 
            try
            {
                MatFileReader matReader = new MatFileReader( filePath );
                MatlabFileAnalyzer analyzer = new MatlabFileAnalyzer();
                fd=analyzer.QueryData( matReader, "ForLeff1Korr0_0fin0_2deg" );
            }
            catch ( Exception ex )
            {
                Console.WriteLine( "Ошибка времени выполнения: " );
                Console.WriteLine( ex );
            }
 
    
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.08.2013, 22:13
C#
1
2
3
4
        static string QueryDefaultFilePath ( )
        {
            return Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "SFB__vector__SFB.mat.b" );
        }
см. сообщение 23.
0
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 163
30.08.2013, 22:24  [ТС]
в результате считывания масивва 1000х1000 я получаю масив 1000000, как бы его лучше опять в 1000х1000 преобразовать, если каждый элемент перебирать то миллионный цикл мне кажется на быстродействии скажется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.08.2013, 22:24

Чтение Matlab-ом функций из excel-я
Задался вопросом ввода вывода данных. А может ли матлаб функцию прочитать из ячейки? я попробовал, в ячейку записывается что то типа ''....

Чтение текстовых данных из Excel в Matlab
Проблема такова: при использовании команды xlsread из Excel в Matlab считываются лишь числовые данные, а как по аналогии прочитать...

В каком из файлов и где сменить права на чтение файлов (пользователи и группы) Apache2?
/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled ...

Подключение DLL - файлов к MatLab
Добрый день/вечер/ночь. Столкнулся я с такой проблемой: у меня имеется электронейромиограф(штука, которая снимает электрические...

Открытие файлов .exe в matlab
можно ли открыть файл ехе в матлабе так, чтобы он показал код этой программы на своём языке? пример - я пишу программу в Pascal ABC.NET,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru