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 aus variablen und char array zusammensetzen

 

Flatty
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 11:59     Titel: string aus variablen und char array zusammensetzen
  Antworten mit Zitat      
hallo
bin am verzweifeln an folgendem problem

ich hab eine if abfrage die elemente einem string hinzufügt oder auch nicht
sieht im moment folgendermaßen aus:


Code:
 files = '';
 
if get(handles.checkbox_datei1, 'Value') == 1
   files = strcat(files, datei1, ',');
end


das programm funktioniert ohne den ',' teil wunderbar
mit gibt er mir jedoch folgenden fehler aus:

Zitat:
??? Cell contents reference from a non-cell array object.



hab schon versucht zu casten aber irgendwie will das nicht

kann mir da jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.03.2008, 13:06     Titel:
  Antworten mit Zitat      
Hi,

welchen Typ hat denn die Variable datei1 und was steht drin?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 13:13     Titel:
  Antworten mit Zitat      
Zitat:
datei1 = strrep(setstr(get(handles.edit_datei1, 'Value')), '.xls', '');


in der edit steht n string drin der dann vom programm weiterverarbeitet wird

wenn ich folgendes fest im code eintrage funktionierts:


Code:
% files = {     'CN230202',
     'CW190201',}

die anführungszeichen sind hier nur dazu da, einen string zu übergeben, weil das prog mit strings arbeitet

wenn das in der konsole ausgewertet wird, werden beide werte untereinander, und nicht wie bei mir, nebeneinander dargestellt.

is das nich n hinweis auf ne struktur?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.03.2008, 13:23     Titel:
  Antworten mit Zitat      
Hm,

ich versteh das nicht ganz.
Musst Du aus dem edit_datei1 nicht 'String' statt 'Value' holen?
Was macht setstr?

Das mit untereinander und nebeneinander wird mit den Dimensionen der Cell zusammenhängen. files = {'aaa','bbb'} und files = {'aaa';'bbb'}.
Das ist wie Zeilen und Spalten.[/code]
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 13:33     Titel:
  Antworten mit Zitat      
in einem edit feld können nur zahlen gespeichert werden
deswegen speicher ich die dort als zahl und muss sie dann natürlich wieder in einen string umwandeln - genau das macht setstr

deswegen hol ich auch nich den string, weil da ja ne zahl drin steht


Code:
files = {files; datei2; ','};

funktioniert übrigens auch nicht
da kommt dann der fehler:
Function 'fprintf' is not defined for values of class 'cell'.

also nochmal erklärt
datei1 ist CN230202 (dafür sorgt ja die ersetzfunktion)
nun soll nach der if abfrage files durch genau diesen string ersetzt werden und zusätzlich weitere dateien wenn die if abfrage pos. verläuft

jedoch müssen diese getrennt werden, und zwar so wie ihr in dem beispiel hier seht:

Code:
files = {    
 'CN230202',
 'CW190201',
}

also immer durch ein komma getrennt

aber nicht als ein string, sondern als mehrere
Private Nachricht senden Benutzer-Profile anzeigen
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 13:35     Titel:
  Antworten mit Zitat      
nachtrag:

Code:
if get(handles.checkbox_datei1, 'Value') == 1
    files = strcat(files, datei1);
end


das funktioniert übrigens, nur wenn ich
Code:
files = strcat(files, datei1, ',');
schreibe gehts nicht mehr =/
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.03.2008, 13:55     Titel:
  Antworten mit Zitat      
Kannst Du ein lauffähiges Beispiel hochladen?
Von fprintf hast Du nichts gesagt.

Hilft Dir die Cell-Struktur weiter?
Code:
clear all;
clc;

files={};
datei1='Datei1';
files=[files datei1]
datei2='Datei2';
files=[files datei2]
files{1}
files{2}




Zitat:
Code:
files = {files; datei2; ','};

funktioniert übrigens auch nicht
da kommt dann der fehler:
Function 'fprintf' is not defined for values of class 'cell'.

So war das nicht gemeint.

Du hast geschrieben
Zitat:
wenn ich folgendes fest im code eintrage funktionierts:
Code:
% files = {     'CN230202',
     'CW190201',}

Wenn Du ein , (oder ein Leerzeichen) schreibst wird 'nebeneinander' angehängt, mit einen ; untereinander.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 15:44     Titel:
  Antworten mit Zitat      
sooo hab das ganze mal hochgeladen:
www.mathematik.uni-marburg.de/~birn.....work_ordner_entpacken.zip

das ganze wie gesagt in den work ordner packen damit die struktur stimmt

wäre super wenn noch jemand helfen kann!

problem befindet sich in line 150!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2008, 16:21     Titel:
  Antworten mit Zitat      
Hallo
vielleicht so?

Code:

files = [];
for i=1:10
   eval(['value=get(handles.checkbox_datei',num2str(i),', ''Value'') ;']);
   if value==1
      eval(['files = [files; {datei',num2str(i),'}];']);
   end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.03.2008, 18:08     Titel:
  Antworten mit Zitat      
Dein Beispiel läuft nicht bei mir, weil irgendwelche txt-Dateien nicht gefunden werden.
Ich hab jetzt selbst ein Mini-Beispiel gebastelt:
Code:
function flatty_gui

clear all;
clc;

h.fig=figure('position',[500 200 800 600]);

h.btn1=uicontrol('style','pushbutton','position',[10 500 100 30],'string','Durchsuchen','tag','btn1');
h.btn2=uicontrol('style','pushbutton','position',[10 450 100 30],'string','Durchsuchen','tag','btn2');
h.btn3=uicontrol('style','pushbutton','position',[10 400 100 30],'string','Durchsuchen','tag','btn3');

h.btnLos=uicontrol('style','pushbutton','position',[10 350 100 30],'string','Bearbeiten');

h.txt1=uicontrol('style','edit','position',[120 500 400 30],'tag','txt1','HorizontalAlignment','right');
h.txt2=uicontrol('style','edit','position',[120 450 400 30],'tag','txt2','HorizontalAlignment','right');
h.txt3=uicontrol('style','edit','position',[120 400 400 30],'tag','txt3','HorizontalAlignment','right');

h.cbx1=uicontrol('style','checkbox','position',[ 530 500 30 30],'tag','cbx1');
h.cbx2=uicontrol('style','checkbox','position',[ 530 450 30 30],'tag','cbx2');
h.cbx3=uicontrol('style','checkbox','position',[ 530 400 30 30],'tag','cbx3');

set(h.btn1,'callback',{@durchsuchen,h});
set(h.btn2,'callback',{@durchsuchen,h});
set(h.btn3,'callback',{@durchsuchen,h});

set(h.btnLos,'callback',{@bearbeiten,h});

function h = durchsuchen(hObject, eventdata, h)
[Dateiname,Pfad]=uigetfile('*.xls','Excel-Datei angeben');
whatbtn=get(hObject,'tag');
switch whatbtn
    case 'btn1'
        set(h.cbx1,'Value',1);
        set(h.txt1,'String',Dateiname);
    case 'btn2'
        set(h.cbx2,'Value',1);
        set(h.txt2,'String',Dateiname);
    case 'btn3'
        set(h.cbx3,'Value',1);
        set(h.txt3,'String',Dateiname);
end

function h = bearbeiten(hObject, eventdata, h)
liste={};
if get(h.cbx1,'Value')
    liste=[liste get(h.txt1,'String')];
end
if get(h.cbx2,'Value')
    liste=[liste get(h.txt2,'String')];
end
if get(h.cbx3,'Value')
    liste=[liste get(h.txt3,'String')];
end

msgbox(strrep(liste,'.xls',''),'ohne Erweiterung');

for i = 1:numel(liste)
    winopen(liste{i})
    sprintf('%d-te Datei: %s',i, liste{i})
end


Vielleicht hilf Dir das weiter.
Ich hab das in Deinem Data-Verzeichnis ausgeführt weil ich keine Pfade eingebaut habe.

Meiner Meinung nach geht das bequem mit cells (ab Zeile 43) und man braucht auch nicht zwischen Chars und String umzuwandeln.
Seit Matlab 5 ist setstr in char umbenannt worden Wink

Ich würde aber selber gern wissen, wie man sowas geschickter macht, also zb. nicht 3 Checkboxen abfragen, sonder 20 oder 30. Gibt es da nicht eine elegante Lösung ohne 20 oder 30 mal dasselbe schreiben zu müssen?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2008, 16:42     Titel:
  Antworten mit Zitat      
haben das problem gefunden
hier der korrekte lauffähige code:


Code:
if get(handles.checkbox_datei1, 'Value') == 1
    %files = [files, datei1]
    files{end+1}=char(datei1)
end
if get(handles.checkbox_datei2, 'Value') == 1
    %files = [files, datei2]
    files{end+1}=char(datei2)
end
....


danke nochmal an die nschlange Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 26.03.2008, 17:38     Titel:
  Antworten mit Zitat      
Hallo,

bist Du sicher, daß das stimmt?

Flatty hat Folgendes geschrieben:
in einem edit feld können nur zahlen gespeichert werden
deswegen speicher ich die dort als zahl und muss sie dann natürlich wieder in einen string umwandeln - genau das macht setstr
...



In der Matlab Help steht bei den uicontrol properties unter der Abteilung 'Value' hingegen klar und deutlich:

Editable text, push buttons, and static text do not set this
property.


Ist das jetzt neu?


Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Flatty
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2008, 11:38     Titel:
  Antworten mit Zitat      
zumindest für die version 1.5.0.1 ja
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.