WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

GUIDE Tabelle Zeile hinzufügen

 

juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 00:42     Titel: GUIDE Tabelle Zeile hinzufügen
  Antworten mit Zitat      
Hallo,
Ich habe eine Gui mit einer Tabelle (3 Spalten), für die ich mittels eines Buttons eine neue Zeile hinzufügen möchte. Der Inhalt der neuen Zeile wird über drei Textfelder definiert. Die funktionierende Version sieht so aus.
Code:

b = get(handles.uitable1, 'data');
c(1,1)=str2double(get(handles.edit1, 'string'));
c(1,2)=str2double(get(handles.edit2, 'string'));
c(1,3)=str2double(get(handles.edit3, 'string'));
b(end+1,:) = c;
set(handles.uitable1, 'data', b);
 

allerding möchte ich jetzt nicht nur Zahlen, sondern auch Text hinzufügen und schaffe es nicht den Code anzupassen.
Wieß jemand weiter?
Vielen Dank,
Jürgen


SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 10:10     Titel:
  Antworten mit Zitat      
Hallo Jürgen,

so wie das für mich aussieht, ist deine Variable "b" eine Matrix. In einer Matrix kann man allerdings nur Zahlen speichern.

Um jetzt einen String in die Tabelle zu schreiben, musst du die Variable als Cell verwenden.

also etwa so:

Code:
c{1,1}=get(handles.edit1, 'string')


eventuell müsstest du auch noch b vorher umwandeln mit "mat2cell"... allerdings habe ich das jetzt noch nicht ausprobiert.

Ich hoffe ich konnte helfen,
Sigi
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 11:08     Titel:
  Antworten mit Zitat      
Hallo Sigi,
Vielen Dank für deine Hilfe! Ich habe das ausprobiert, und es funktioniert, sprich: er nimmt die Werte jetzt als Cell-werte an, allerdings schaffe ich es nicht Werte nicht zurück in das uitable zu bringen
Code:

b = {get(handles.uitable1, 'data')};
c{1,1}=str2double(get(handles.edit1, 'string'));
c{1,2}=str2double(get(handles.edit2, 'string'));
c{1,3}=char(get(handles.edit3, 'string'));
b{end+1,1} = c{1,1};
b{end+1,2} = c{1,2};
b{end+1,3} = c{1,3};
set(handles.uitable1, 'data', b);
 

für die Zeile set(... kommt die Fehlermeldung "Data within a cell array must have size [1 1]"

Vielen Dank für Deine Mühe!
Jürgen
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 11:53     Titel:
  Antworten mit Zitat      
So nach kleinem ausprobieren funktioniert das folgende bei mir:

Code:
b = get(handles.uitable1, 'data');
c{1,1}={str2double(get(handles.edit1, 'string'))};
c{1,2}={str2double(get(handles.edit2, 'string'))};
c{1,3}=get(handles.edit3, 'string');
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);


Ich hoffe das erfüllt deine Wünsche Wink

Falls nicht einfach nochmal nachfragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 12:08     Titel:
  Antworten mit Zitat      
Hallo Sigi,

Nochmal vielen Dank für deine Hilfe, allerdings funktioniert es bei mir immer noch nicht (habe extra deinen Code mit copy/paste übernommen um mich nciht zu verschreiben), jetzt kommt die Meldung "Error using double:
Conversion to double from cell is not possible." in der Zeile
Code:

b(end+1,1) = c{1,1};
 

Liegt das daran, dass matlab b wieder als (Zahlen-)Matrix ansieht, inkompatibel zu einem Cell-Array?

Ich bin am verzweifeln. Nochmals vielen Dank für deine Mühe!
Jürgen
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 12:19     Titel:
  Antworten mit Zitat      
Der Fehler taucht bei mir nicht auf!

Den kann ich nur produzieren, wenn ich in der Zeile

Code:
c{1,1}={str2double(get(handles.edit1, 'string'))};


die eckigen Klammern auf der rechten Seite des Gleichheitszeichen weglasse.

Hast du alles kopiert? Und welche Matlab Version hast du?
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 12:27     Titel:
  Antworten mit Zitat      
Ja, hatte deinen kompletten Code kopiert. Ich benutze 2012a.
Welche eckingen Klammern? die geschweiften, oder die runden?
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 12:40     Titel:
  Antworten mit Zitat      
Hi Sigi,

Ich will ein wenig weiter ausholen, um Missverständnisse zu vermeiden:
in edit1 steht eine Zahl, z.B. "1", in edit2 steht ebenfalls eine Zahl, "2" und in edit3 steht Text, "name" und in der Tabelle soll das ganze so aussehen
1 2 name_a
3 4 name_b
... etc
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 12:47     Titel:
  Antworten mit Zitat      
ah entschuldigung ich meinte natürlich geschweifte Klammern!

Wie die Tabelle aussehen soll habe ich schon verstanden Wink

Ich benutze R2013a, kann dir aber leider nicht sagen, ob der Fehler wegen deiner Version zustande kommt...


Wäre es für dich denn auch okay, wenn die Zahlen in der Tabelle als Strings formatiert sind?

Dann wäre folgender Code auch möglich:

Code:
b = get(handles.uitable1, 'data');
c{1,1}=get(handles.edit1, 'string');
c{1,2}=get(handles.edit2, 'string');
c{1,3}=get(handles.edit3, 'string');
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);


Falls du die Zahlen dann irgendwann auslesen willst und als zahlen interpretieren möchtest (für Rechnungen oder Vergleiche) müsstest du halt str2num() verwenden. Damit erhälst du dann aus dem String eine Zahl.
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 13:07     Titel:
  Antworten mit Zitat      
Hallo Sigi,

Das mit den Zahlen als Strings, so wie von dir vorgeschlagen, habe ich auch scohn ausprobiert, leider ebenfalls ohne Erfolg, trotzdem aber Danke. Es kommt wieder "Conversion to double from cell is not possible." in Zeile
Code:
b(end+1,1) = c{1,1};

also da, wo er c wieder in die Matrix schreiben möchte
Könnte es vielleicht daran liegen, dass b als numerische Matrix angesehen wird, und c, als cell, erst in eine Zahl umgewandelt werden müsste, was eben nicht geht?
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 13:19     Titel:
  Antworten mit Zitat      
ah ja natürlich, dein Tabelleninhalt der bereits in der Tabelle ist, besteht wahrscheinlich nur aus Zahlen oder?

Dann kann es gut sein, das b bei dir eine Matrix ist. Ist es möglich den Tabelleninhalt zu ändern? Also dort von Anfang an ein Cell reinzuschreiben und keine Matrix?

Falls das nicht möglich ist sollte folgender Code jetzt endlich wirklich mal funktionieren:

Code:
b=get(handles.uitable1, 'data');
if ~iscell(b)
    b = mat2cell(b,ones(1,length(b)),[1 1 1]);
end
c{1,1}=get(handles.edit1, 'string');
c{1,2}=get(handles.edit2, 'string');
c{1,3}=get(handles.edit3, 'string');
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);


Falls b also eine Matrix ist, wird diese in ein Cell umgewandelt.

Ich hoffe das klappt jetzt so Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 13:19     Titel:
  Antworten mit Zitat      
Hallo Sigi,
Ich habe das Problem gefunden! Ich hatte die Tabelle im GUIDE anscheinend falsch definiert. Habe b jetzt im workspace als Array
Code:
b={1, 2, 'erstername'}
definiert und dann im property Inspector der Tabelle als "DATA" angegeben. Jetzt kann ich weitere Zeilen in der selben Form (zahl, zahl, text) hinzufügen. Eine kleine Frage hätte ich aber noch. Jetzt steht, wenn man die GUI öffnet ja die erste Zeile ("1", "2", und "erstername") bereits in der Tabelle. Wie kann ich mit einer leeren Tabelle anfangen?
Vielen Dank für die bisherige Hilfe!
Jürgen
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 13:42     Titel:
  Antworten mit Zitat      
Um eine leere Tabelle zu erhalten, muss du im PropertyInspector unter Data "Change data value to the selected workspace variable below" auswählen und dort dann eine vorher erstellte Variable wählen, die leer ist.
Beispiel:
tmp=[]

Eine andere Möglichkeit besteht darin, die Tabelle im Code zu leeren.

Dazu würde ich eine CreateFcn für die Tabelle erstellen, um darin die Tabelle zu leeren.

Ein Beispiel siehst du hier:

Code:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


b=get(handles.uitable1, 'data');
if isempty(b)
    b=cell(0,3)
end
if ~iscell(b)
    b = mat2cell(b,ones(1,length(b)),[1 1 1]);
end
c{1,1}=get(handles.edit1, 'string')
c{1,2}=get(handles.edit2, 'string')
c{1,3}=get(handles.edit3, 'string')
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);


% --- Executes during object creation, after setting all properties.
function uitable1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to uitable1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

set(hObject,'data',[]);


Zu beachten ist, dass die drei Zeilen

Code:


in jedem Fall (auch bei dem PropertyInspector) ergänzt werden müssen!
Private Nachricht senden Benutzer-Profile anzeigen
 
juergenre

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 18:00     Titel:
  Antworten mit Zitat      
Vielen Dank, Sigi, es hat alles wunderbar funktioniert! Very Happy
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.