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

string array holen und als datei name benutzen

 

Baltam
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2010, 02:12     Titel: string array holen und als datei name benutzen
  Antworten mit Zitat      
Hallo,

ich hab eine schleife in meinem GUI-M-File wo ich einen bestimmten Anzahl von Dateien speichern muss . Ich möchte nun diese Dateien (mit einem Edit Box) bennen bzw. einen Namen geben befor die gespeichert werden.

die schleife sieht so aus ,

Code:

 data = get(ai,'UserData');
if(data.curtrigger <= data.maxtriggers)
   if(data.curtrigger == data.maxtriggers)
      for i=1:data.maxtriggers
          c = getdata(ai);

          c = c(data.delay:data.samples,:);

          data.c{data.curtrigger} = c ;
          disp(i)

          save(sprintf('Messung %d.mat',i),'c');  % Hier werden die MAT dateien nummeriert

          stop(ai);
          start(ai);
         pause(0.05);
      end
   end
   data.curtrigger = data.curtrigger + 1;
 
end
 


hann mir jemand helfen ?[/quote]
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 03:41     Titel:
  Antworten mit Zitat      
Hallo,

den Inhalt einer Edit Box bekommst du (unter GUIDE programmiert) mit:
Code:

name = get(handles.edit1,'String'); % edit1 = Name der Edit Box
 

Manuell erzeugte Edit Box:
Code:

h = uicontrol('style','edit');
name = get(h,'String');
 


Willst du in deinem Code den Namen Messung, durch den in der Edit Box eingegebenen Namen austauchen, dann musst du folgenden save Befehl verwenden:
Code:

save(sprintf('%s %d.mat',name,i));
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 13:05     Titel:
  Antworten mit Zitat      
Hi,
danke für die Antwort,

Die funktion wo das Speichern läuft hat kein Handles im Header wobei die ganze variabeln werden von 'UserData' geholt.
Die innere Schleife wird nur durchgefürt wenn die Taste 'Daten speichern' gedrückt wird und einen Anzahl von Dateien größer als 0 gegeben wird.

hier nochmal ein bischen übersichtlicher :

Code:

function triggerendcallback(ai,event)

  data = get(ai,'UserData');
 
if(data.curtrigger <= data.maxtriggers)
 

   if(data.curtrigger == data.maxtriggers)
      for i=1:data.maxtriggers
          c = getdata(ai);
          c = c(data.delay:data.samples,:);
          data.c{data.curtrigger} = c ;
          disp(i)
          save(('Messung %d .mat',i),'c');
          stop(ai);
          start(ai);
      end
   end
   data.curtrigger = data.curtrigger + 1;
 
end
set(ai,'UserData',data)
stop(ai);
start(ai);
 



davor sieht die 'UserData' so aus :
Code:

data.storedFFTsIndex = 1;
data.plotSurf          = 0;
data.ai                 = ai;
data. getdata         = [d zeit];
data.daqfft             = [f mag];
data.handle            = [];
data.figureHandles   = handles;
data.view               = [103 10];
data.rotateStep      = 4;
data.counter           = 0;
data.delay              = 1;
data.curtrigger        = 1;        
data.maxtriggers     = 0;  
data.samples           = handles.samplesPerTrigger;


set(data.ai, 'UserData', data)   % Diese Linie wird nur einmal durchgefürt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 14:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Die funktion wo das Speichern läuft hat kein Handles im Header

verstehe ich nicht? Wo gibst du denn deinen Namen für die Datein ein? Hasst du eine Edit Box erstellt, so hat diese auch ein handle (siehe die beiden Beispiele aus meinem letzten Post).

Wie würdest du denn gern den Dateinamen haben. Gib doch mal ein Beispiel, derzeit scheint es ja laut dieser Zeile
Code:

save(sprintf('Messung %d.mat',i),'c');  % Hier werden die MAT dateien nummeriert
 

Messung1.....Messung2...Messungx zu sein? Möchtest du dies?

Zudem bist du auch nicht auf meine Lösungen eingegangen: Haben Sie nicht funktioniert, entsprachen sie nicht deinen Erwartungen, und wie schon gesagt was sind deine Erwartungen. Zudem ist dein zusätzlicher Code mit den ganzen data.feld Angaben doch dafür völlig unrelevant für die Benennung der Daten oder? Was sind die zusätzlichen Informationen die ich daraus schließen sollte?

Du siehst viele Unklarheiten meinerseits.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 15:42     Titel:
  Antworten mit Zitat      
Ja allerdings, ich die ganzen data.felder sind irrelevant für was ich machen will.

also die daten so wie es in der Schliefe steht werden doch in Dateien gespeichert: Messung 1, Messung 2 etc etc..
Ich möchte nur noch einen String von einem Edit Text,der was auf dem Titel der Datein dazu legt. Zum Beispiel wenn der User in dem Edit Text schreibt (Blabla) dann werden die Daten so umbenennt : blabla Messung 1, blabla Messung 2, usw.

Die erste Idee war für mich auch den handles.edittext zu holen, aber wenn das Programm in die Function triggerendcallback steht hat er schon vorher die handles gelöscht.
wie gesagt das ganze läuft non stop und wird immer wieder getriggert.

wenn du magst kann ich dir das ganze file schicken.
Ich bin so der MATLAB Programmierer aber ich lerne gern was neues.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 16:07     Titel:
  Antworten mit Zitat      
Hallo,

du musst die handles natürlich der function triggerendcallback übergeben. Ich habe mal ein Minimalbeispiel gebastelt, wo du in einem edit Feld den Dateinamen angibst und nach dem Drücken des Buttons deine Daten speichern kannst:
Code:

function test
h = uicontrol('style','edit','Units','normalized','Position',[.5 .5 .1 .1]);
uicontrol('style','pushbutton','Units','normalized','Position',[.5 .35 .1 .1],'String','Save Data',...
'callback',{@triggerendcallback,h}); % callback mit Übergabe des handles h
end

function triggerendcallback(varargin)
name = get(varargin{3},'String');
c = rand(10); % deine Varibalen
save(sprintf('%s_Messung %d.mat',name,1),'c');
end
 


Code in einer function speichern und ausführen. Sag besched, ob es das ist was du suchtest.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 18:12     Titel:
  Antworten mit Zitat      
Sco vielen vielen dank.
das ist genau was ich brauche, aber da ich die ganzen gadgets und auch edit text mit GUIDE erstellt hab, weiss ich nicht wie ich dein Beispiel in meinem implementieren kann.

kannst du mit bitte das auch zeigen? mit uicontrols kenn ich mich noch nicht aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 19:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Die funktion wo das Speichern läuft hat kein Handles im Header

Wenn du es mit GUIDE programmiert hasst, MUSST du eine handles Struktur haben, da Matlab diese automatisch erzeugt! Also muss folgender Befehl funktionieren:
Code:

name = get(handles.edit1,'String'); % Edit Box Tag ist 'edit1'
 

Egal in welchen Callback du bist, die handles Strktur (enthält die Objekte deiner Oberfläsche) ist immer verfügbar. D.h. der Code deines Buttons 'Daten Speichern' muss so aussehen:
Code:

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

name = get(handles.edit1,'String');
c = rand(10); % deine Variablen
save(sprintf('%s_Messung %d.mat',name,1),'c');
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 20:02     Titel:
  Antworten mit Zitat      
das ist das Problem Sco, wenn ich in der Schleife triggerendcallback bin sind die handles nicht mehr verfügbar.

ich hab dein Code probiert und geht leider nicht.

die Push Button zum speichern sieht so aus :

Code:

% --- Executes on button press in pbStore.
function pbStore_Callback(hObject, eventdata, handles)

data = get(handles.ai,'UserData');
data.curtrigger = 1;
data.maxtriggers = str2double(get(handles.tstore,'String'));
set(handles.ai,'UserData',data);
 


die c sind die erneuerten samples nach jeden Trigger, deshalb steht die in triggerendcallback schleife, um in jeden erzeugten Datei neue Samples zu speichern.

bedeutet inhalt von c wird 'i' mal in txt Datein gespeichert und nmmeriert.

Ich verstehe immer noch nicht voran das liegt.

MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 20:22     Titel:
  Antworten mit Zitat      
Hi,

Danke Sco. Es hat doch geklappt allerdings sollte ich doch was in data.felder zufügen.
Deine Angaben waren doch hifreich, ich weiss das mein Code sehr Chaotisch aussieht, aber ich muss damit umgehen Smile

Ich hätte noch eine bitte, (soll ich einen neuen Thread öffnen? )

beim Clicken aufm Store button soll ein Fenster aufgehen um den Pfad auszuwählen wo die ganzen Files gespeichert werden sollen..

Kannst du oder jemand andere mit dabei helfen ?

Danke Sco und gomatlab
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 20:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Es hat doch geklappt

na das ist doch schön Smile.
Zitat:

Clicken aufm Store button soll ein Fenster aufgehen um den Pfad auszuwählen wo die ganzen Files gespeichert werden sollen..

Schau dir dies an:
Code:


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 20:57     Titel:
  Antworten mit Zitat      
hmm das sieht gut aus...

Hab noch einen Problem.

Wie schon gesagt die Datein werden ganz brave gespeichert mit dem Befehl :
Code:
csvwrite(sprintf('%s_Messung %d.mat',fn,i),c);


das problem nun ist die Übertragung von Datien von da wo die gespeichert sind zum Workspace. Die Menge von diesen Dateien soll in großer Anzahl generiert werden. und um die zum Workspace zu holen muss ich jeden Datei eizeln mit rechte Maustaste--> Import Data---> Bestätigen..

Gibt´s einen Heilmittel dagegen ??



Danke vielmals
MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 21:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Code:

csvwrite(sprintf('%s_Messung %d.mat',fn,i),c);
 


Warum speicherst du sie plötzlich als CSV, die ganze Zeit hasst du doch von einer mat File (save-Befehl) gesprochen?

Mat-files kannst du mit:
Code:

laden. Musst du wenn es mehrere sind halt in ne Schleife packen. Die File-Namen hasst du ja.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Baltam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2010, 22:43     Titel:
  Antworten mit Zitat      
Hallo Sco,

als scv kann ich die dateien zum Workspace rüber ziehen mit dem richtigen Namen, aber mit SAVE nehmen die Dateien in Workspace nur die Name C obwohl sie nach nummern im Speicherort gespeichert sind. d.h. wenn ich die zweite Datei rüber ziehe wird der erste c überschrieben. Ich versteh auch nicht warum das passiert.

für Load function, soll ich die auch in die Schleife schreiben ? oder soll die extra im Command Window gegeben werden ??

danke vielmals
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.10.2010, 23:38     Titel:
  Antworten mit Zitat      
Hallo,

Das c überschrieben wird ist doch klar, da dein mat-File (Verschiedene Namen) eben nur eine Variable Namens 'c' enthält! Wenn du dies vermeiden möchtest, dann solltest du anstatt immer c in eine mat File zu speichern, c1, c2... oder so speichern. Verwende dafür folgenden Code (prinzipiell):
Code:

for k = 1:10 % deine Schleife
     c = rand(10); % deine Variablen
     eval(['c' num2str(k) '= c;']); % erzeugt c1...c2...cx als Variablenname, so dass es beim Import nicht überschrieben wird
end
 


Wegen dem load: Nur um nochmal sicherzugehen, dass ich verstanden habe was du machst, bzw. machen möchtest. Du speicherst mehrere Mat-Files, denen du zuvor einen Namen gegeben hasst. Nun möchtest du Sie wieder alle einladen?
Wo machst du das--> in deinem Programm? (das würde wenig Sinn machen, warum dann zuvor erst als mat-File speichern), oder danach in einem anderem Programm?
Also was hasst du mit den mat-Files vor?

MFG

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