From 34168f6d934c952bb3040f66513e05e7d705c2ba Mon Sep 17 00:00:00 2001
From: Lizzzka007 <gashchuk2011@mail.ru>
Date: Wed, 6 Dec 2023 01:38:51 +0300
Subject: [PATCH] Hotfix for plt variable names

---
 plotter/ProcData.py | 54 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 39 insertions(+), 15 deletions(-)

diff --git a/plotter/ProcData.py b/plotter/ProcData.py
index 141774a..a2f3567 100755
--- a/plotter/ProcData.py
+++ b/plotter/ProcData.py
@@ -2,18 +2,8 @@ import numpy as np
 import os
 import numpy as np
 from .binSubfunctions import *
+import re
 
-def character_indexes(string, match):
-    indexes_of_match = []
-
-    for index, character in enumerate(string):
-        if character == match:
-            indexes_of_match.append(index)
-    return indexes_of_match
-
-def GetVariableName(string):
-    indexes_of_match = character_indexes(string, '"')
-    return string[indexes_of_match[0] + 1 : indexes_of_match[1]]
 class ProcData:
     def __init__(self, filename=None):
         self.filename = filename
@@ -25,10 +15,10 @@ class ProcData:
         with open(self.filename, "r") as file:
             file_data = file.read().split('\n')
         file.close()
-        
-        idx =  character_indexes(file_data[1], '=')
 
-        names = [GetVariableName(variable_name) for variable_name in file_data[1][idx[0] : ].split(',')]
+        text = file_data[1]
+        pattern = '\"(.*?)\"'
+        names = re.findall(pattern, text)
         self.variable_names = np.array(names, dtype=object)
     
     def __get_variable_names_bin(self):
@@ -271,18 +261,52 @@ class ProcData:
                 idx = np.where(np.abs(self.data[col]) > abs_val)
                 self.data[col][idx] = np.nan
 
+    def __read_dsq(self):
+        STIRNG_TERMINATOR = '\x00'
+        INT_LEN = 4
+        TIME_VAR_NUM = 0
+
+        f = open(self.filename, 'rb')
+
+        nvars = int.from_bytes(f.read(INT_LEN), byteorder='little')
+        names_len = int.from_bytes(f.read(INT_LEN), byteorder='little') + len(STIRNG_TERMINATOR)
+
+        self.variable_names.append('time')
+        for _ in range(nvars):
+            self.variable_names.append(str(f.read(names_len), encoding='utf-8').strip(STIRNG_TERMINATOR))
+
+        buffer = np.frombuffer(f.read(), dtype=np.float64)
+        nrecs = len(buffer) // (nvars + 1)
+        data = buffer.reshape([nrecs, nvars + 1])
+
+        f.close()
+
+        time = data[:, TIME_VAR_NUM]
+        vars = data[:, TIME_VAR_NUM + 1:]
+
+        self.data['time'] = np.copy(time)
+        for name, i in zip(self.variable_names[1 : ], range(nvars)):
+            self.data[name] = np.copy(vars.T[i])
+
+        # return DsqData(nvars, nrecs, time, vars, varnames)
+
+
     def process_file(self, ndim, column_names, mval):
+        print('dddd')
         filename_parts = os.path.splitext(self.filename)
         filename_extension = filename_parts[-1]
         self.var = column_names
         self.mval = mval
 
-        # print(ndim, self.filename)
+        print(ndim, self.filename)
 
         if filename_extension == '.plt':
             self.__read_plt(ndim)
         elif filename_extension == '.nsx':
             self.__read_bin()
+        elif filename_extension == '.dsq':
+            print('ffffff')
+            self.__read_dsq()
 
     def get_variable_names(self):
         filename_parts = os.path.splitext(self.filename)
-- 
GitLab