How to fill a table in AppDesigner with data from cell?
8 次查看(过去 30 天)
显示 更早的评论
JoKi
2020-7-11
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 个评论
madhan ravi
2020-7-11
Kannst du uns zeigen, wie x1 aussieht? Bin kein Pro im AppDesigner, aber kann versuchen.
Adam Danz
2020-7-11
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.
JoKi
2020-7-11
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:

madhan ravi
2020-7-11
编辑:madhan ravi
2020-7-11
Ersetze
cell2mat(x1)
durch
datenum(x1{:})
oder
duration(x1{:})
JoKi
2020-7-11
Dann erhalte ich den Wert 7.3779e+05? Allerdings wird mir das zumindest in der Tabelle angezeigt
JoKi
2020-7-11
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.
madhan ravi
2020-7-11
编辑:madhan ravi
2020-7-11
Kannst du den Inhalt von x1 anzeigen und welche Version von MATLAB verwendest du?
JoKi
2020-7-11
achso, aber das x1 ist das gleiche welches ich hier am Anfang in den Kommentaren gepostet habe.
madhan ravi
2020-7-11
编辑:madhan ravi
2020-7-11
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.
Adam Danz
2020-7-11
编辑:Adam Danz
2020-7-12
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.
JoKi
2020-7-12
@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:

JoKi
2020-7-12
编辑:JoKi
2020-7-12
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{:});
madhan ravi
2020-7-12
Welche Version von MATLAB verwendest du? Mit 2020a bekomme ich keinen Fehler. Beachte, dass die Duration im Jahr 2014 eingeführt wurde.
JoKi
2020-7-12
Ohh entschuldige, das habe ich überlesen. Ich benutze auch MATLAB R2020a. Dann muss ich irgendwo einen Fehler beim eingeben gemacht haben oder?
Adam Danz
2020-7-12
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.
回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!发生错误
由于页面发生更改,无法完成操作。请重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
亚太
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)