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

Struct abspeichern in .mat file

 

Spidermohaa
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 11:02     Titel: Struct abspeichern in .mat file
  Antworten mit Zitat      
Hallo,
ich bin grade dabei ein kleines programm in Matlab zu schreiben. Bin noch blutiger Anfänger...

Grundidee:
Es sollen Daten aus GUI edit_textfeldern ausgelesen in einer Struct datei abgelegt und als dateiname.mat gespeicht werden. kunde(n).name , kunde(n).vorname usw.
später sollen die einzelnen Daten wieder ausgelesen werden können.

Problem 1:
Ich kann zwar über den "save dateiname strucktname" Befehl einen struckt speichen aber, wenn ich die Datei mit zb
Code:

wieder lade und daten hinzufügen möchte überschreibt er die alten.
Ist ja auch logisch weil ich das n von
Code:
"kunde(n).name
usw nicht habe. Wie kann ich mir das aus der gespeichten .mat datei wiederholen, sodass er sozusagen hinter dem letzten Eintrag z.B
Code:
kunde(5).name
nun das n auf 6 wechselt und ich einen weiteren Eintrag
Code:
kunde(6).name
machen kann ohne, dass er dabei die anderen daten von 1-5 mit ' ' überschreibt.


Das wäre schonmal eine Große Hilfe...
War bestimmt nicht die letzte Frage...


Vielen Dank...[/code]
Private Nachricht senden Benutzer-Profile anzeigen


keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 19.06.2008, 11:11     Titel:
  Antworten mit Zitat      
Stehen die structs alle in einzelnen Dateien, oder stehen sie in ein- und derselben?

Wie genau werden die structs erzeugt?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 19.06.2008, 12:11     Titel:
  Antworten mit Zitat      
Moin,

probiers mal mit
Code:
n = numel(kunde.name);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Spidermohaa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 12:47     Titel:
  Antworten mit Zitat      
es sieht bis jetzt wie folgt aus...
Code:
function kunden_struct()
load kundenliste;
%load kundenanz;

n = numel(kunde.name)+1
kunde=struct('name', '', 'vorname', '');
    kunde(n).name=input('Name:','s');
    kunde(n).vorname=input('Vorname:','s');
%filename='kundenliste.mat';
%fid=fopen(filename, 'a')
%tline=kunde;
%fclose(fid);
save kundenliste kunde;


Das klappt ntürlich überhaupt nicht.

Nochmal, ich möchte einfach nur einen struct in einer datei.mat speichn um dann dort daten eintragen zu können. D.H. Z.B. ich hab einen Struckt mit einem Kunden, name,vorname usw.. Als nächstes möchte ich dann einen neuen Kunden in dem struct eintragen mit neuem name,vorname usw.. Hierbei soll der alte natürlich nicht überschrieben werden.
Bei mir klappt das nur soweit, dass er zwar nen neuen einträgt den alten aber überschreibt...

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 13:45     Titel:
  Antworten mit Zitat      
Code:
function kunden_struct()
load kundenliste;
%load kundenanz;

n = numel(kunde)+1;
kunde(n).name=input('Name:','s');
kunde(n).vorname=input('Vorname:','s');
%filename='kundenliste.mat';
%fid=fopen(filename, 'a')
%tline=kunde;
%fclose(fid);
save kundenliste kunde


edit: MfG vergessen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Spidermohaa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 14:28     Titel:
  Antworten mit Zitat      
hääää,
war nur das ; falsch ?

weil dies kunde=struct(...); hatte ich bei mir auch schon testweise rausgenommen ^^

naja jetzt gehts soweit schonmal hurra Very Happy

Danke...

Noch ne Frage was sollte ich verwenden? Ich möchte die einzelnen structdaten in einer listbox oder tabelle im gui fenster laden und anklicken können, aber wie mach ich das hab zwar einige beiträge im Forum hier gefunden aber bin aus dehen nicht wirklich schau geworden.

Ganz einfach wie lade ich z.B. aus meinem struct, kunde(n) in zeile 1 mit den Spalten1. kunde(n).name, 2. kunde(n).vorname usw.
versteh auch die anleitung von matlab selber da nicht richtig...

Hoffe könnt sonem nappel wie mir weiterhelfen...



Noch ne kleine Frage wie kann ich z.B. kunde(1) löschen?

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 15:33     Titel:
  Antworten mit Zitat      
Spidermohaa hat Folgendes geschrieben:

war nur das ; falsch ?

weil dies kunde=struct(...); hatte ich bei mir auch schon testweise rausgenommen ^^


Nein, das ; verhindert in Matlab nur die Ausgabe auf das Kommandofenster. Der Befehl kunde=struct(...) legt die Variable / Struktur kunde neu an und überschreibt somit auch die vorhandene, gleichlautende Variable.

Zitat:
Noch ne Frage was sollte ich verwenden? Ich möchte die einzelnen structdaten in einer listbox oder tabelle im gui fenster laden und anklicken können, aber wie mach ich das hab zwar einige beiträge im Forum hier gefunden aber bin aus dehen nicht wirklich schau geworden.

Ganz einfach wie lade ich z.B. aus meinem struct, kunde(n) in zeile 1 mit den Spalten1. kunde(n).name, 2. kunde(n).vorname usw.
versteh auch die anleitung von matlab selber da nicht richtig...

Hoffe könnt sonem nappel wie mir weiterhelfen...


Mit Tabellen habe ich noch nichts gemacht. Listboxen sind meines Wissens nach nur einspaltig. Sie werden mit uicontrol aufgerufen. Siehe dazu
Code:

Ein kleines Bsp wäre
Code:
h = uicontrol('Style','ListBox','String',{kunde.name},'Position',[1 1 200 400]);

Die Namen werden in eine ListBox mit der Property 'String' als string oder cell array aus Strings übergeben.

Zitat:

Noch ne kleine Frage wie kann ich z.B. kunde(1) löschen?
MFG


Code:
kunde(1) = [];
Private Nachricht senden Benutzer-Profile anzeigen
 
Spidermohaa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 18:43     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal, mit einer tabelle wäre es aber glaube ich besser.

Hab mal was zusammen geflickt aber bekomme es noch nicht richtig hin, er läd zwar daten rein aber nicht in die richtigen spalten bzw. zeilen.

Code:
function test()
f = figure;
load kundenliste;
n = numel(kunde.name)

     
     % colnames = {'Name:', 'Vorname:', 'Adresse:', 'Plz:', 'Ort:'};
     % t = uitable(f, 'Data', kunde.name, 'ColumnName', colnames,'Position', [20 20 260 100]);
             %  h = uicontrol('Style','ListBox','String',{kunde.name},'Position',[1 1 200 400]);
               %UITABLE(f,'String',{kunde.name},'String',{kunde.vorname})
               f = figure('Position',[100 100 400 150]);
dat =  {6.125, 456.3457, true,  'Fixed';...
        6.75,  510.2342, false, 'Adjustable';...  
        7,     658.2,    false, 'Fixed';};

for k=1:n
   % strucdata={kunde(k).name,kunde(k).vorname,kunde(k).adresse,kunde(k).plz,kunde(k).ort};
end
strucdata={kunde.name;kunde.vorname;kunde.adresse;kunde.plz;kunde.ort}
columnname =   {'Name:', 'Vorname:', 'Adresse:', 'Plz:', 'Ort:'};
columnformat = {'char', 'char', 'char', 'char','char'};
columneditable =  [false false false false];
t = uitable('Units', 'normalized','Position',...
            [0.1 0.1 0.9 0.9], 'Data', strucdata,...
            'ColumnName', columnname,...
            'ColumnFormat', columnformat,...
            'ColumnEditable', columneditable);


Wäre super wenn mirjemand nochmal nen tip geben könnte wie ich den struct da vernünftig reinladen kann.


Vielen Dank!

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2008, 23:02     Titel:
  Antworten mit Zitat      
Ich weiss nicht welche Matlab Version du hast, aber
Code:
help uitable
  WARNING: This feature is not supported in MATLAB
  and the API and functionality may change in a future release.


Naja, allerdings sollte mit R2007a

Code:
strucdata={kunde.name;kunde.vorname;kunde.adresse;kunde.plz;kunde.ort}';
columnname =   {'Name:', 'Vorname:', 'Adresse:', 'Plz:', 'Ort:'};
t = uitable('Data', strucdata,...
            'ColumnNames', columnname,...
            'NumColumns',length(columnname),...
            'NumRows',n);


funktionieren. Als Property stehen bei mir

'data'
'columnnames'
'numrows'
'numcolumns'
'gridcolor'
'rowheight'
'parent'
'position'
'columnwidth'

zur Verfügung.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2008, 22:49     Titel:
  Antworten mit Zitat      
Moin hab nochmal ne Frage, bin mit euer Hilfe schon nen ganzes Stück weiter gekommen, aber ...

Wenn ich wie weiter oben beschrieben einen Struct eintrag löschen möchte z.B. kunde(1) geht das im Matlab hauptschirm manuell ohne Probleme, in meinem Programm :
Code:

...
function listbox1_Callback(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from listbox1
   global kunde
    vars = get(hObject,'String');
   handles.select = get(hObject,'Value');
    set(handles.text4, 'String', handles.select);
    name=kunde(handles.select).name;
    vorname=kunde(handles.select).vorname;
    adresse=kunde(handles.select).adresse;
    plz=kunde(handles.select).plz;
    ort=kunde(handles.select).ort;
    antwort=sprintf(' Name: %s \n Vorname: %s \n Adresse: %s \n Plz: %s \n Ort: %s',name,vorname,adresse,plz,ort);
    set(handles.text5, 'String', antwort);

...
function pushbutton_kundenloechen_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_kundenloechen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global kunde
a=questdlg('Den Ausgewählen Kunden wirklich löschen?', 'Ausgewählten Kunden löschen?', 'Ja','Abbruch', 'Ja');
switch a
    case 'Ja'
        kunde(handles.select)=[ ];
        save kundenliste
end
...
 


da kommt nur die folgene Fehlermeldung:
??? Subscript indices must either be real positive integers or logicals.

Error in ==> kundenliste2>pushbutton_kundenloechen_Callback at 190
kunde(handles.select)=[];

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> kundenliste2 at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
guidemfile>@(hObject,eventdata)kundenliste2('pushbutton_kundenloechen_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback




Jemand ne Idee?

Vielen Dank!

MFG
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2008, 07:35     Titel:
  Antworten mit Zitat      
Das liegt meiner Meinung nach daran dass handles.select, das in der ersten Funktion gesetzt wird, nicht übergeben wird. D.h. du setzt zwar den Wert richtig, allerdings bleibt der nur lokal in der Funktion.

Du kannst ja mal in deinen Funktionen handles.select ausgeben, das dürfte beides Mal ein anderer Wert sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 24.06.2008, 07:55     Titel:
  Antworten mit Zitat      
Moin,

ich denke auch, dass es daran liegt.
Schreib mal an das Ende deiner Funktionen
Code:
guidata(hObject,handles);


Dann sollte es klappen Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2008, 08:25     Titel:
  Antworten mit Zitat      
wow nice!

Vielen Dank!


Da fällt mir aber noch was ein...

Wie kann ich den angezeigten struct kunde.name z.B. alpabetisch sortieren, so das er in der listbox in alphabetischer Reinfolge steht ohne, dass doppelte namen rausgelöscht werden.


MFG
 
Spidermohaa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2008, 08:29     Titel:
  Antworten mit Zitat      
Toll, war ja gar nicht eingeloggt...

SRy
Private Nachricht senden Benutzer-Profile anzeigen
 
Spidermohaa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2008, 08:59     Titel:
  Antworten mit Zitat      
Moin, nochmal....

Bin grade voll am verzweifeln, es geht plötzlich nix mehr, hab nix verändert und plötzlich geht nichts mehr...

Datein hängen an...

Der fehler hier kommt immer:
??? Error using ==> set
Invalid handle object.

Error in ==> kundenliste3>kundenliste2_OpeningFcn at 60
set(handles.listbox1, 'String', {kunde.name} );

Error in ==> gui_mainfcn at 221
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in ==> kundenliste3 at 42
gui_mainfcn(gui_State, varargin{:});

Ich hatte zum testen
Code:
set(handles.listbox1, 'String', {kunde.name}{kunde.vorname} );

eingegeben, ging nicht also hab ich alles wieder wie vorher geschrieben und nun...

Dabei lief schon alles so gut-.-

Ich hoffe jemand hat ne Idee...

kundenliste2.m
 Beschreibung:

Download
 Dateiname:  kundenliste2.m
 Dateigröße:  8.3 KB
 Heruntergeladen:  631 mal
kundenliste2.fig
 Beschreibung:

Download
 Dateiname:  kundenliste2.fig
 Dateigröße:  5.66 KB
 Heruntergeladen:  526 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.