首页 > 解决方案 > MatLab:如何将具有不同数据类型的 2 个数组附加到表中?

问题描述

我正在尝试创建一个包含测量数据的表,以便稍后将其写入 SQL DB。

目前,我正在努力将 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?

标签: arraysmatlabtypes

解决方案


您正在执行以下操作:

  1. voltage将和组合timestamp成一个数组。此时变量类型必须相同,因此您最终将所有内容都作为int64.

  2. 从您的组合数组创建一个表。这是一个int64数据表,因为这是您的组合数组包含的内容。

相反,只需直接从您的变量创建一个表。请注意,这table是一个非常糟糕的变量名,因为它会影响内置table函数。

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

或者,您可以初始化表并一一添加列:

tbl = table();
tbl.Voltage = voltage;
tbl.Timestamp = timestamp;

推荐阅读