.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);
}
}