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

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

25.07.2013, 18:11. Показов 6948. Ответов 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
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru