Forum:  Matlab
Thema: Daten in uitable darstellen
Themen-Übersicht
physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Themenstart: 2013-07-25 14:52

Hallo!

Habe folgendes Problem/Frage:

Ich habe eine Funktion definiert, in der ich eine Struktur erstellt habe, welche mir pro Probe/Messung alle dazugehörigen Werte wiedergeben kann, wenn ich den bestimmten/gesuchten Wert aufrufe (soweit so gut - struct halt)

Nun möchte ich diese Struktur auf meiner GUI in einer Tabelle darstellen! Und hier ist der Punkt an dem ich nicht weiterkomme! Könnt ihr mir vielleicht weiterhelfen?

Danke schon im voraus!


GLG


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.1, eingetragen 2013-07-25 14:55

Hallo,

wo hakt es denn? Hast du bereits eine Tabelle eingebunden in das GUI?

Grüße, Marc


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.2, vom Themenstarter, eingetragen 2013-07-25 15:00

Ja ich habe bereits eine Tabelle eingebunden, nur bekomme ich meine Werte nicht in diese Tabelle


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.3, eingetragen 2013-07-25 15:05

Probiere es mal so:
Matlab
% structArray ist ein Array aus structs mit den Properties A und B
 
myUitable = uitable;
dataToShow = [{structArray.A}',{structArray.B}'];
set(myUitable ,'Data',dataToShow);

[ Nachricht wurde editiert von gaussmath am 25.07.2013 15:09:02 ]


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.4, vom Themenstarter, eingetragen 2013-07-25 15:23

Nein funktioniert leider nicht :(


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.5, eingetragen 2013-07-25 15:27

Ein bisschen mehr Info wäre nicht schlecht. Wie lauten die Fehlermeldungen? Kannst du eventuell die relevanten Teile deines Codes posten?


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.6, vom Themenstarter, eingetragen 2013-07-25 15:31

Es tut sich gar nichts, keine Fehlermeldung nichts! Finde es auch gerade sehr strange:

function probe_iden(num_prob,C)
% probe_iden(num_prob)
% struct probe definieren
probe = struct('Messzeit', C(:,1), ...
               'Kraft', C(:,2), ...
               'Temperatur', C(:,3), ...
               'Umpoler', C(:,4), ...
               'Potential', C(:,5), ...
               'Video_Weg', C(:,6), ...
               'Weg_induk', C(:,7), ...
               'delta_A', C(:,8), ...
               'Weg_DMS', C(:,9), ...
               'Kerblaenge_Secotom', 28.6, ...
               'Kerblaenge_Klinge', 1.5, ...
               'Kerblaenge_Anschw_lang', 0, ...  
               'Kerblaenge_Anschw_kurz', 0, ...
               'Kerblaenge_Anschw_mittel', 0, ... 
               'Gesamt', 0, ...  
               'Cycles', 0, ...
               'F_min', 200, ...
               'F_max', 2000, ...
               'Lastverhaeltnis', 0.1, ...
               'Probenlaenge', 60.3, ...
               'Probendicke', 1.5, ...
               'Risslaenge', 0, ...
               'Korrekturfaktor', 0, ...
               'Korrekturfunktion', 0, ...
               'K_min', 0, ...
               'K_max', 0, ...
               'K_krit', 0, ...
               'delta_K', 0);
 
 
% Einleseschleife für:
% -> Kerblaenge_Anschw_lang
% -> Kerblaenge_Anschw_kurz
% -> Cycles
% n=1 bis n=num_pers
 
%num_prob = 1;
fprintf('Bitte die Daten von der Probe Nummer %g eingeben: \n', num_prob);
 
for n = 1:num_prob
    probe(n).Kerblaenge_Anschw_lang = input('Kerblaenge Anschwingen lang:');
    probe(n).Kerblaenge_Anschw_kurz = input('Kerblaenge Anschwingen kurz:');
    probe(n).Cycles = input('Cycles:');
    fprintf( '\n' );
end

hier meine Struktur und diese einzelenen unter"titel" will ich als tabelle ...also:

kerblaenge | Risslaenge | bla | bla |
28.30      | 1.5        |Zahl |Zahl |

sowas möcht ich in meiner GUI haben, damit ich übersichtlich pro messung meine werte habe


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.7, eingetragen 2013-07-25 15:50

Ich muss ganz ehrlich sagen, dass ich das nicht verstehe, was du da vorhast.

Willst du "probe" komplett in einer Tabelle darstellen? Warum gibt die Funktion "probe" nicht zurück?

Was genau willst du darstellen in der Tabelle?


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.8, vom Themenstarter, eingetragen 2013-07-25 15:55

Hintergrunderklärung:

Ich mach ein Praktikum und mein betreuer wollte, dass ich alle Werte, die so gemessen werden bzw vorliegen in einer Struktur verpacke und diese struktur dann pro Probenstück in der benutzeroberfläche in einer tabelle darstellen kann und dort will er, wenn notwendig, die messwerte noch umändern können. anhand dieser tabelle bzw. den eingelesenen daten sollen dann bestimmte werte ausgerechnet werden und plots erstellt werden, die dann auch in meiner benutzeroberfläche dargestellt werden sollen... alles soweit so gut. Ich selbst versteh nur die sinnhaftigkeit nicht, zuerst eine struktur erstellen zu müssen und dann diese in einer tabelle darzustellen.... meine idee war es ja die einzelnen werte aus der struktur aufzurufen udn mit denen dann die berechnungen zu machen... mein betreuer will aber so wie oben erklärt.... Ich hoffe das war jetzt einigermaßen verständlich :/

PS: danke für deine bemühungen


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.9, eingetragen 2013-07-25 16:13

OK, dann ändere mal den Funktionskopf zu
Matlab
function probe=probe_iden(num_prob,C)
...

Dann weiter:
Matlab
probe = probe_iden(num_prob,C);
myUitable = handles.DerNameDerTabelle;
dataToShow = [{probe.Messzeit}',{probe.Temperatur}', ...];
set(myUitable ,'Data',dataToShow);

Jetzt besteht das Problem, dass manche Spalten nicht die gleiche Länge haben. Dazu kann man die Funktion an den entsprechenden Stellen anpassen:
Matlab
function probe=probe_iden(num_prob,C)
 
[row,~]=size(C);
% probe_iden(num_prob)
% struct probe definieren
probe = struct('Messzeit', C(:,1), ...
               'Kraft', C(:,2), ...
               'Temperatur', C(:,3), ...
               'Umpoler', C(:,4), ...
               'Potential', C(:,5), ...
               'Video_Weg', C(:,6), ...
               'Weg_induk', C(:,7), ...
               'delta_A', C(:,8), ...
               'Weg_DMS', C(:,9), ...
               'Kerblaenge_Secotom', ones(row,1)*28.6, ... 
               'Kerblaenge_Klinge', ones(row,1)*1.5, ... % usw.
               'Kerblaenge_Anschw_lang', 0, ...  
               'Kerblaenge_Anschw_kurz', 0, ...
               'Kerblaenge_Anschw_mittel', 0, ...
               'Gesamt', 0, ...  
               'Cycles', 0, ...
               'F_min', 200, ...
               'F_max', 2000, ...
               'Lastverhaeltnis', 0.1, ...
               'Probenlaenge', 60.3, ...
               'Probendicke', 1.5, ...
               'Risslaenge', 0, ...
               'Korrekturfaktor', 0, ...
               'Korrekturfunktion', 0, ...
               'K_min', 0, ...
               'K_max', 0, ...
               'K_krit', 0, ...
               'delta_K', 0);
 
 
% Einleseschleife für:
% -> Kerblaenge_Anschw_lang
% -> Kerblaenge_Anschw_kurz
% -> Cycles
% n=1 bis n=num_pers
 
%num_prob = 1;
fprintf('Bitte die Daten von der Probe Nummer %g eingeben: \n', num_prob);
 
for n = 1:num_prob
    probe(n).Kerblaenge_Anschw_lang = input('Kerblaenge Anschwingen lang:');
    probe(n).Kerblaenge_Anschw_kurz = input('Kerblaenge Anschwingen kurz:');
    probe(n).Cycles = input('Cycles:');
    fprintf( '\n' );
end


[ Nachricht wurde editiert von gaussmath am 25.07.2013 16:16:01 ]</font
Edit: Fehler in Funktionskopf beseitigt
[ Nachricht wurde editiert von gaussmath am 25.07.2013 19:45:02 ]


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.10, vom Themenstarter, eingetragen 2013-07-25 16:17

Danke dir :)

Werde ich morgen gleich ausprobieren. Jetzt reichts mir mal für heute :)

Schönen Tag noch :)

LG


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.11, vom Themenstarter, eingetragen 2013-07-29 14:12

Hallo ich habe das jetzt mal ausprobiert, aber es tut sich gar nichts! Keine Fehlermeldung - nothing :/


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.12, eingetragen 2013-07-29 14:14

Gut, dann poste bitte mal den Code, wo die Funktion aufrufst und die Tabelle setzt. Hast du die Funktion angepasst? Poste auch die aktuelle Version.

Schau' bitte nach, wie die Tabelle heißt. Hast du das GUI mit guide erstellt?


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.13, vom Themenstarter, eingetragen 2013-07-29 14:29

Ja habe es mit guide erstellt und hier ist der Teil:

% --- Executes when entered data in editable cell(s) in uitable1.
function uitable1_CellEditCallback(hObject, eventdata, handles)
% hObject    handle to uitable1 (see GCBO)
% eventdata  structure with the following fields (see UITABLE)
%	Indices: row and column indices of the cell(s) edited
%	PreviousData: previous data for the cell(s) edited
%	EditData: string(s) entered by the user
%	NewData: EditData or its converted form set on the Data property. Empty if Data was not changed
%	Error: error string when failed to convert EditData to appropriate value for Data
% handles    structure with handles and user data (see GUIDATA)
function probe = probe_iden(num_prob,C)
[row,~] = size(C);
% probe_iden(num_prob)
 
%num_prob = input('Probennummer:');
 
% struct probe definieren
 
probe = struct('Probennummer', 0, ...
               'Messzeit', C(:,1), ...
               'Kraft', C(:,2), ...
               'Temperatur', C(:,3), ...
               'Umpoler', C(:,4), ...
               'Potential', C(:,5), ...
               'Video_Weg', C(:,6), ...
               'Weg_induk', C(:,7), ...
               'delta_A', C(:,8), ...
               'Weg_DMS', C(:,9), ...
               'Kerblaenge_Secotom', ones(row,1)*28.6, ...
               'Kerblaenge_Klinge', ones(row,1)*1.5, ...
               'Kerblaenge_Anschw_lang', 0, ...  
               'Kerblaenge_Anschw_kurz', 0, ...
               'Kerblaenge_Anschw_mittel', 0, ... 
               'Gesamt', 0, ...  
               'Cycles', 0, ...
               'F_min', 200, ...
               'F_max', 2000, ...
               'Lastverhaeltnis', 0.1, ...
               'Probenlaenge', 60.3, ...
               'Probendicke', 1.5, ...
               'Risslaenge', 0, ...
               'Korrekturfaktor', 0, ...
               'Korrekturfunktion', 0, ...
               'K_min', 0, ...
               'K_max', 0, ...
               'K_krit', 0, ...
               'delta_K', 0);
 
 
% Einleseschleife für:
% -> Kerblaenge_Anschw_lang
% -> Kerblaenge_Anschw_kurz
% -> Cycles
% n=1 bis n=num_pers
 
%num_prob = Probennummer;
%fprintf('Bitte die Daten von der Probe Nummer %g eingeben: \n', num_prob);
 
%for n = 1:num_prob
   % probe(n).Kerblaenge_Anschw_lang = input('Kerblaenge Anschwingen lang:');
   % probe(n).Kerblaenge_Anschw_kurz = input('Kerblaenge Anschwingen kurz:');
   % probe(n).Cycles = input('Cycles:');
   % fprintf( '\n' );
%end
 
probe = probe_iden(num_prob,C);
myUitable = handles.uitable1;
dataToShow = ['{probe.Messzeit}','{probe.Temperatur}'];
set(myUitable,'Data',dataToShow);


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.14, eingetragen 2013-07-29 15:09

Mach mal einen Breakpoint bei "set(myUitable,'Data',dataToShow);" und gib dann "dataToShow" aus über rechte Maustaste->evaluate.. aus. Was kommt raus?

Edit: Oder lass einfach das Semikolon am Zeilenende weg.
Edit1: Ich gehe davon aus, dass man das struct vor Übergabe an die Funktion definieren muss, dann in der Funktion mit Werten füllt und wieder zurück gibt.
[ Nachricht wurde editiert von gaussmath am 29.07.2013 15:19:09 ]


physicist07
Junior
Dabei seit: 27.05.2011
Mitteilungen: 15
Aus: Österreich
Beitrag No.15, vom Themenstarter, eingetragen 2013-07-29 15:24

>> dataToShow = ['{probe.Messzeit}','{probe.Temperatur}']
 
dataToShow =
 
{probe.Messzeit}{probe.Temperatur}

das hier kommt raus, wenn ich es ausgeben lasse... wenn ich das semikolon entferne tut sich nichts


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.16, eingetragen 2013-07-29 16:05

OK, so geht es tatsächlich nicht:
Matlab
clc
 
C=rand(3,3)
filledProbe=structFunction(C)
['{filledProbe.Messzeit}','{filledProbe.Temperatur}']

Matlab
function filledProbe=structFunction(C)
 
	filledProbe = struct('Messzeit', C(:,1), ...
						'Temperatur', C(:,3));
 
end

Aber so:
Matlab
clc
 
C=rand(3,3)
filledProbe=structFunction(C);
[filledProbe.Messzeit,filledProbe.Temperatur]


gaussmath
Senior
Dabei seit: 16.06.2007
Mitteilungen: 9031
Aus: Hannover
Beitrag No.17, eingetragen 2013-07-29 16:14

Wenn "dataToShow" aus unterschiedlichen Datentypen besteht, musst du mit Cell-Arrays arbeiten.




Dieses Forumbeitrag kommt von Matroids Matheplanet
http://http://matheplanet.com

Die URL für dieses Forum-Thema ist:
http://http://matheplanet.com/default3.html?topic=184664=41003
Druckdatum: 2017-11-25 06:32