You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
How to fill a table in AppDesigner with data from cell?
21 views (last 30 days)
Show older comments
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
madhan ravi
on 11 Jul 2020
Kannst du uns zeigen, wie x1 aussieht? Bin kein Pro im AppDesigner, aber kann versuchen.
Adam Danz
on 11 Jul 2020
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
on 11 Jul 2020
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
on 11 Jul 2020
Edited: madhan ravi
on 11 Jul 2020
Ersetze
cell2mat(x1)
durch
datenum(x1{:})
oder
duration(x1{:})
JoKi
on 11 Jul 2020
Dann erhalte ich den Wert 7.3779e+05? Allerdings wird mir das zumindest in der Tabelle angezeigt
JoKi
on 11 Jul 2020
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
on 11 Jul 2020
Edited: madhan ravi
on 11 Jul 2020
Kannst du den Inhalt von x1 anzeigen und welche Version von MATLAB verwendest du?
madhan ravi
on 11 Jul 2020
Edited: madhan ravi
on 11 Jul 2020
Aber mann das ist kein x1, sondern Datum :(
JoKi
on 11 Jul 2020
achso, aber das x1 ist das gleiche welches ich hier am Anfang in den Kommentaren gepostet habe.
madhan ravi
on 11 Jul 2020
Edited: madhan ravi
on 11 Jul 2020
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
on 11 Jul 2020
Edited: Adam Danz
on 12 Jul 2020
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
on 12 Jul 2020
@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
on 12 Jul 2020
Edited: JoKi
on 12 Jul 2020
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
on 12 Jul 2020
Welche Version von MATLAB verwendest du? Mit 2020a bekomme ich keinen Fehler. Beachte, dass die Duration im Jahr 2014 eingeführt wurde.
JoKi
on 12 Jul 2020
Ohh entschuldige, das habe ich überlesen. Ich benutze auch MATLAB R2020a. Dann muss ich irgendwo einen Fehler beim eingeben gemacht haben oder?
Adam Danz
on 12 Jul 2020
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.
Answers (0)
See Also
Categories
Find more on String Parsing in Help Center and File Exchange
Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)