.NET 4.x Дозапись в binary mat файл - C#

Узнай цену своей работы

Формулировка задачи:

Привет, заранее прошу прощение, если тема создана не там. Идея такова. Имеются постоянно прибывающие данные каждую секунду, которые нужно сохранять. После требуется с ними работать в Matlab. В данный момент реализовал только запись в обычный бинарник, а после по требованию весь его считываю в память и пере сохраняю в виде .mat файла. Это не есть правильно. Хотелось бы писать сразу в .mat файл с возможность дозапись в файл. Имеется библиотека для .NET 4.x csmatio. Она позволяет с легкостью записать .mat файл, но нет возможность дозаписать в файл. Единственный выход это вручную формировать бинарный .mat файл. Имеется вроде как даже не большой материал. Но мне очень тяжело в нем разобраться. Может кто сталкивался с подобным и сможет мне помочь?

Решение задачи: «.NET 4.x Дозапись в binary mat файл»

textual
Листинг программы
using System;
using System.Globalization;
using csmatio.io;
using csmatio.types;
public class Program
{
    static double[][] GetNewMatrix(double[][] oldMatrix, double[] addArray)
    {
        double[][] newMatrix = new double[oldMatrix.Length + 1][];
        for (int i = 0; i < oldMatrix.Length; i++)
        {
            newMatrix[i] = new double[oldMatrix[i].Length];
            for (int j = 0; j < oldMatrix[i].Length; j++)
            {
                newMatrix[i][j] = oldMatrix[i][j];
            }
        }
        newMatrix[newMatrix.Length - 1] = addArray;
        return newMatrix;
    }
 
 
    static void Main(string[] args)
    {
        string received = "-99.0, 8.0, -77.2";
        double[][] oldMatrix = null;
        string[] arrStr = received.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
        double[] doubles = Array.ConvertAll(arrStr, delegate (string s) { return Double.Parse(s, CultureInfo.InvariantCulture); });
 
        // create a reader for the file 
        MatFileReader mfr = new MatFileReader("data3.mat");
 
        // get a reference to our matlab 'squares' double matrix 
        MLDouble mlSquares = (mfr.Content["matrix"] as MLDouble);
        if (mlSquares != null)
        {
            Console.WriteLine("old matrix : ");
            // now get the double values 
            oldMatrix = mlSquares.GetArray();
            foreach (double[] row in oldMatrix)
            {
                Console.WriteLine();
                foreach (double col in row)
                    Console.Write(col + " ");
            }
        }
        Console.WriteLine();
        Console.WriteLine("\nnew matrix : ");
        double[][] newMatrix = GetNewMatrix(oldMatrix, doubles);
        foreach (double[] row in newMatrix)
        {
            Console.WriteLine();
            foreach (double col in row)
                Console.Write(col + " ");
        }
         // пересохраняем файл
        MLDouble mlDoubleArray = new MLDouble("matrix", newMatrix);
        List<MLArray> mlList = new List<MLArray>();
        mlList.Add(mlDoubleArray);
        MatFileWriter mfw = new MatFileWriter("data3.mat", mlList, false);
        Console.ReadKey(true);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы