How to fill a table in AppDesigner with data from cell?

Hello,
i need some help since i dont really know how to solve my errors. My Datas is stored and i want it to be shown in a table but the error im getting is: "Unable to perform assignment because the indices on the left side are not compatible with the size of the right side."
So my Data i want to show is date, time, left or right side and name.
Thanks for any help!
% Button pushed function: EinlesenButton
function EinlesenButtonPushed(app, event)
%Diese Funktion dient dem direkten Lesen der auf dem übergeben Pfad
%hinterlegten CSV-Datei. Diese Datei muss exakt der Formatierung der
%Dateien entsprechen die das Program "Power" des Diagnostikgerätes
%liefert.
%Einlesen der Datei über den Umweg mit strings
% Öffnen eines Fensters zur Auswahl der zu öffnenden .csv Dateien.
[filename,pathname] = uigetfile('*.csv;','MultiSelect',"on");
for i = 1:length(filename)
filepath=fullfile(pathname, filename);
fid = fopen (filepath{i});
%[file,path]=uigetfile('*.csv');
A = textscan(fid, '%s%s%s%s%s%s%s%s%s%s%s%s%s','Delimiter',';');
%Umwandeln von Cell --> String
B=string([A{:}]);
%',' durch '.' ersetzen
B=replace(B,',', '.'); % ',' durch '.' ersetzen
% Aufteilen in Header und Messdaten
Daten(i).Header=B(1:30,:);
Daten(i).Messdaten=str2double(B(31:end,7));
end
for i = 1:length(filename)
%Uhrzeit
x = char(Daten(i).Header(12,1));
x1 = extractBetween(x,13,20 );
%Datum
y = char(Daten(i).Header(11,1));
y1 = extractBetween(y,11,20);
%Bein Seite
z = char(Daten(i).Header(21,1));
if strlength(z) == 22
z1 = extractBetween(z,10,14);
else
z1 = extractBetween(z,10,15);
end
app.UITable.Data(i,2) = cell2mat(x1); % <------ Here starts my problem
app.UITable.Data(i,3) = cell2mat(y1);
app.UITable.Data(i,4) = cell2mat(z1);
end

24 Comments

Kannst du uns zeigen, wie x1 aussieht? Bin kein Pro im AppDesigner, aber kann versuchen.
Na klar, x1 wäre jetzt hier die Uhrzeit.
According to your code, x is a char array. X1 must also be a char array. The image above shows a cell array containing a vector where 10:36:11 results in a scalar value of 10. Some something doesn't add up. I also don't understand how those values represent time-of-day.
well the time there would be 10am 36min 11s, if that is what you mean.
If i run the code in the command window on its own i get this:
Ersetze
cell2mat(x1)
durch
datenum(x1{:})
oder
duration(x1{:})
Dann erhalte ich den Wert 7.3779e+05? Allerdings wird mir das zumindest in der Tabelle angezeigt
Bekomme dann den Error: The following error occurred converting from duration to double:
Undefined function 'double' for input arguments of type 'duration'. To convert from durations to numeric, use the SECONDS, MINUTES, HOURS, DAYS, or YEARS functions.
Kannst du den Inhalt von x1 anzeigen und welche Version von MATLAB verwendest du?
Ja, habe das ganze als Datum = duration (x1{:}); abgespeichert
Aber mann das ist kein x1, sondern Datum :(
Und jetzt, das gleiche?
x1 = regexp(x,'\d*','match');
X1 = num2cell(str2double(x1));
app.UITable.Data(i,2) = duration(X1{:})
Wenn es nicht funktioniert, du musst mindestens zwei CSV-Datei hochladen.
After another quick look at your code, it looks like you could be reading the data in more efficiently, depending on how the csv files are organized.
Instead of using textscan perhaps you could use readtable or readcell or something similar. These functions allow you to read in datetime & duration values directly rather than reading them in as strings and converting them.
@madhan ravi
für x1 und X1 bekomme ich jetzt für beide ein 1x3 cell
Zum testen lade ich immer 4 .csv Dateien hoch
@Adam Danz
my data looks like this:
Hast du mit meinem Vorschlag die richtige Antwort bekommen?
Nein leider nicht, ich bekomme die Fehlermeldung:
The following error occurred converting from duration to double:
Undefined function 'double' for input arguments of type 'duration'. To convert from durations to numeric, use the SECONDS, MINUTES, HOURS, DAYS, or YEARS functions.
Ich habe den Code jetzt so eingegeben:
x = char(Daten(i).Header(12,1));
x1 = regexp(x,'\d*','match');
X1 = num2cell(str2double(x1));
app.UITable.Data(i,2) = duration(X1{:});
Welche Version von MATLAB verwendest du? Mit 2020a bekomme ich keinen Fehler. Beachte, dass die Duration im Jahr 2014 eingeführt wurde.
Ohh entschuldige, das habe ich überlesen. Ich benutze auch MATLAB R2020a. Dann muss ich irgendwo einen Fehler beim eingeben gemacht haben oder?
Wahrscheinlich, als ich schon gesagt, kriege ich keinen Fehler :(.
Okay, dann schaue ich nochmal bei mir nach, aber schonmal danke für deine Mühe!
Based on those data, I'd use readtable. That function allows you to define the row where the tabular data start and it also allows you to define the input format of datetime values With 1 line of code you could read in the data with the correct datetime values.
Okay, i will try that. Thank you!

Sign in to comment.

Answers (0)

Categories

Asked:

on 11 Jul 2020

Commented:

on 14 Jul 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!