MatLab: Как добавить к таблице 2 массива с разными типами данных? - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь создать таблицу с данными измерений для последующей записи ее в базу данных SQL.

В настоящее время я пытаюсь добавить в одну таблицу 2 массива с разными типами данных.

Массив значений напряжения имеет тип данных "double", а метка времени - "int64".

Использование array2table работает нормально, за исключением того, что тип данных обоих столбцов таблицы - int64.

Мне удалось определить типы данных 2 столбцов в таблице, но как только я добавляю массивы, моя предопределенная таблица перезаписывается.

Есть ли способ достичь этой цели? Заранее спасибо!

packetData = {'1.2 1573209575861;1.1 1573209575861;1.0 1573209575861;0.9 1573209575861;0.8 1573209575861;', '1.3 1573209575862;1.2 1573209575862;1.1 1573209575862;1.0 1573209575862;0.9 1573209575862;', '1.4 1573209575863;1.3 1573209575863;1.2 1573209575863;1.1 1573209575863;2.0 1573209575863;'};
stringvalues = split(packetData, ";");

dim_stringvalues = size(stringvalues);

i_max = dim_stringvalues(2)
j_max = (dim_stringvalues(3))-1
k_max = ((dim_stringvalues(3))-1)*i_max

k=1;

while k<=k_max
    for i = 1:i_max
        for j = 1:j_max

                datagram_entries(k,1)=stringvalues(1,i,j);
                k=k+1;
        end
    end
end

%Split and create separate arrays
split_voltage_timestamp = split(datagram_entries, " ");
voltage_string = split_voltage_timestamp(:,1)
timestamp_string = split_voltage_timestamp(:,2)

%Convert
voltage = str2double(voltage_string)
timestamp_double = str2double(timestamp_string)
timestamp = int64(timestamp_double)

%Create Table for SQL
tableSize = [length(voltage) 2]  %nx2 Tabelle 

data_array = [voltage timestamp];

table = table('Size', tableSize, 'VariableTypes', {'double', 'int64'}, 'Variablenames', {'Voltage', 'Timestamp'});
table = array2table(data_array, 'Variablenames', {'Voltage', 'Timestamp'});

%% HOW TO APPEND ARRAYS "voltage" and "timestamp" with their correct Datatype?

1 Ответ

1 голос
/ 08 ноября 2019

Вы делаете следующее:

  1. Объединяете voltage и timestamp в один массив. На этом этапе типы переменных должны быть одинаковыми, так что вы получите все как int64.

  2. Создать таблицу из вашего объединенного массива. Это таблица данных int64, потому что это то, что содержится в вашем комбинированном массиве.

Вместо этого просто создайте таблицу непосредственно из ваших переменных. Обратите внимание, что table - очень плохое имя переменной, потому что оно затеняет встроенную функцию table.

tbl = table( voltage, timestamp, 'VariableNames', {'Voltage', 'Timestamp'} );

В качестве альтернативы, вы можете инициализировать таблицу и добавлять столбцы один за другим:

tbl = table();
tbl.Voltage = voltage;
tbl.Timestamp = timestamp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...