From 6069d16c077daacebfc001c2558373533e6d9890 Mon Sep 17 00:00:00 2001 From: Alexander Luzgarev Date: Thu, 3 Apr 2025 18:33:03 +0200 Subject: [PATCH] Better treatment of embedded objects --- MatFileHandler.Tests/MatFileReaderTests.cs | 25 ++++++++++++++++++ .../test-data/good/table-with-strings.mat | Bin 0 -> 1033 bytes MatFileHandler/MatFileHandler.csproj | 2 +- MatFileHandler/SubsystemDataReader.cs | 10 +++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 MatFileHandler.Tests/test-data/good/table-with-strings.mat diff --git a/MatFileHandler.Tests/MatFileReaderTests.cs b/MatFileHandler.Tests/MatFileReaderTests.cs index a06ad71..44e1e21 100755 --- a/MatFileHandler.Tests/MatFileReaderTests.cs +++ b/MatFileHandler.Tests/MatFileReaderTests.cs @@ -390,6 +390,31 @@ namespace MatFileHandler.Tests Assert.Equal(new[] { 1.0, 3.0, 5.0, 2.0, 4.0, 6.0 }, variable2.ConvertToDoubleArray()); } + /// + /// Test reading a table with strings + /// + [Fact] + public void TestTableWithStrings() + { + var matFile = GetTests("good")["table-with-strings"]; + var obj = matFile["t"].Value as IMatObject; + var table = new TableAdapter(obj); + Assert.Equal(5, table.NumberOfRows); + Assert.Equal(2, table.NumberOfVariables); + Assert.Equal(new[] { "Numbers", "Names" }, table.VariableNames); + var variable = table["Names"] as ICellArray; + var name0 = new StringAdapter(variable[0]); + Assert.Equal("One", name0[0]); + var name1 = new StringAdapter(variable[1]); + Assert.Equal("Two", name1[0]); + var name2 = new StringAdapter(variable[2]); + Assert.Equal("Three", name2[0]); + var name3 = new StringAdapter(variable[3]); + Assert.Equal("Four", name3[0]); + var name4 = new StringAdapter(variable[4]); + Assert.Equal("Five", name4[0]); + } + /// /// Test subobjects within objects. /// diff --git a/MatFileHandler.Tests/test-data/good/table-with-strings.mat b/MatFileHandler.Tests/test-data/good/table-with-strings.mat new file mode 100644 index 0000000000000000000000000000000000000000..eb71b0adf1c94dfb2b3afbdd1197085fe9abe26b GIT binary patch literal 1033 zcmV+k1orz)K~zjZLLfCRFd$7qR4ry{Y-KDUP;6mzW^ZzBIv`L(S4mDbG%O%Pa%Ew3 zWn>_4ZaN@TXmub#aB?6ZGaxZIIx;glG&dkJFfuhDARr(hARr(hARr(hARr(hARr(h zARr(hARr(hARr(hARr(hARr*p00000000000ZB~{0000=0001Zoa19)U}ykhHX!Bz zVnGH7U+B!Q2xPMYaYZ%0qz?G@ecq1051ao0C=3uSi5f9FciI#CC5&iXFCL)I(F=stpOYa>5!yo9?h02 zv5*k3C_|DRA7Dqnvm?|VVMIF9=M|UEogIv7gcj#-hrt-55_V2o<@=GjPSg3e%JDjPDSng0 z(Js(W@jACy41C+b3wc9!f7AU}_h+TAHDi6w zjPBh)~odQdxgEC{e;?c3h;FQURCn`C^+}=Qt}YKYw(4< zpWbAo{aVCW?bi6;^!M;O0Q18l&Oo4xpQVy9HwwjWLQXH_3F9LSR*#7HE6&Bq{n@U5 zzqaZ%;n942NIq4amreOkdtS-&n$DZK9(AGXaaMjm)^6SXvF`p>d7X6!IX(5)?Y#M0g#Ua>ye`4e zBJ{kjxNrWC^ERBqH}^~WU8k?kplSJK`XTUN2)^ih)G5K+O3r netstandard2.0;net461;net472 - 1.4.0-beta3 + 1.4.0-beta4 MatFileHandler A library for reading and writing MATLAB .mat files. Alexander Luzgarev diff --git a/MatFileHandler/SubsystemDataReader.cs b/MatFileHandler/SubsystemDataReader.cs index b6141d8..aca0bcd 100644 --- a/MatFileHandler/SubsystemDataReader.cs +++ b/MatFileHandler/SubsystemDataReader.cs @@ -334,6 +334,16 @@ namespace MatFileHandler } } + if (array is MatCellArray cellArray) + { + for (var i = 0; i < cellArray.Data.Length; i++) + { + var cell = cellArray.Data[i]; + var transformedCell = TransformOpaqueData(cell, subsystemData); + cellArray.Data[i] = transformedCell; + } + } + return array; } -- 2.45.2