Verfasst am: 26.10.2011, 11:38
Titel: umwandeln von einer zeichenkette in zahlen um...
hallo zusammen,
ich habe jetzt wirklich lange ausporbiert und denke, dass ich um eure hilfe bitten kann:
mein problem ist folgendes:
ich möchte teile der dateinamen (der dateien im aktuellen ordner) auslesen und in vektoren packen! es sollen vier vektoren entstehen!einer für die unterschiedlichen stoffe, einer für die unterschiedlichen drücke und für die z- und y-positionen.
In an assignment A(I) = B, the number of elements in B and
I must be the same.
also ich weiss nicht mehr so recht weiter!
hat jemand eine idee?
würde mich sehr freuen!
mfg,
waldemar
ps.:
aus den vektoren möchte ich später lediglich die anzahl der unterschiedlichen drücke, die anzahl der unteschiedlichen stoffe... filtrieren! demnach muss im vektor für die stoffnamen nicht zwingend der name selbst stehen! deswegen habe ich es auch mit double und int32 probiert!
am ende brauche ich halt vektoren, die bei verwendung von einer funktion (hab ihr da vielleicht direkt eine idee?) die anzahl der unterschiedlichen drücke... ausspuckt!
letztendes sind es ungefähr 11unterschiedliche stoffe, 5unterschiedliche drücke....!
_________________
Verfasst am: 26.10.2011, 12:38
Titel: Re: umwandeln von einer zeichenkette in zahlen um...
Hallo Waldemar,
Das Problem ist recht kompliziert beschrieben. Ich versuche es mal zusammen zu fassen, um herauszufinden, ob ich Dich richtig verstehe:
Du hast einen Cell-String:
Code:
C = {'v_stat_Buta300_y3_z-25', ...
'v_stat_Deca400_y3_z0', ...
'v_stat_Deca400_y3_z25'};
Daraus möchtest Du den String 'Buta' und 'Deca' und die nachfolgende Zahl heraus trennen. Hat der String immer genau 4 Buchstaben und der Druck immer 3 Ziffern? Ist der Druck die Zahl, die hinter 'Buta' und 'Deca' kommt? Für Dich ist das sicher trivial, aber die Leser im Forum habe keine Ahnung, was diese Strings bedeuten sollen.
Einen String einfach per UINT32 ind eine skalare Zahl umzuwandeln ist nicht möglich. Ein String ist ein CHAR-Vektor und das konvertieren per UINT32 erzeugt einen weiteren Vektor der gleichen Größe, nur mit anderem Typ. Versuche das doch einfach mal im Command-Window:
Das Beantworten von Fragen fällt immer leichter, wenn sie möglichst wenig Balast enthalten. Wenn Dein Problem also nichts mit DIR etc zu tun hat, verwirren die entsprechenden Code-Zeilen nur.
Deca steht für den Stoff und hat immer die gleiche Länge (4Buchstaben).
300 steht für den Druck und hat ebenfalls immer die gleiche Länge(3Ziffern).
Die y_position steht hinter y und ist immer eine Ziffer.
Die z_position steht hinter z wobei die Länge ungleich ist.
im laufe meiner überlegungen bzw. versuchter problemlösung habe ich dann:
beim druck, der z- und y_postion klappt es ja auch!
nur noch der vektor für den stoffnamen will nicht so richtig.
mein zeil war es die vektoren so aufzufüllen, dass ich mit ihnen prima weiterarbeiten kann!
vielleicht hilft es:
der nächste schritt ist nämlich, zu schauen, wieviele unterschiedliche stoffe habe ich überhaupt?
momentan wollte ich das mit einer schleife angehen!
und zwar folgendermaßen:
falls der aktuelle stoffname ungleich der bisherigen ist, soll er in einen neuen vektor eingefügt werden ansonsten nicht!
hoffe, dass es jetzt verständlicher formuliert ist.
aber ich verstehe trotzdem nicht warum ich es nicht über den namen selbst hinbekommen habe!?
man müsste doch auch zeichenkette vergleichen können (also ohne stoff_zahl und stoff_s) und somit auch mit den if-anweisungen auf basis der zeichenketten zum ziel kommen.
naja,
aber das problem ist an sich gelöst und probieren und scheitern erweitern ja nur das verständnis und deswegen glaube ich, dass ich jeden tag einwenig weiter komme!
Das Problem bei der Verwendung der Namen ist, dass Du sie in einen skalaren Wert schreiben wolltest. Und das ist nicht möglich, weil die Namen mehrere Buchstaben haben.
Code:
x(1) = uint32('Name'); % ERROR! Links steht 1 Element, rechts aber 4
% Mit Cell Strings geht es aber, weil jedes Cell-Elemnt wieder ein Array sein kann:
C = cell(1, 3);
C{1} = 'Name1';
C{2} = 'Name2';
C{3} = 'Name3';
strcmp(C, 'Name2')
also dieses problem habe ich fast gelöst!
leider kriege ich den letzten schritt nicht hin!
mein ziel ist:
aus den dateiennamen eine zeichenkette auslesen und einen vektor erstellen, der alle unterschiedlichen zeichenketten zusammenfasst (und nichts mehr)!!
hat jetzt jeweils einmal die verschiedenen stoffnamen also 'buta', 'etha' usw. aber dazwischen, also bis der neue stoffname detektiert wurde lauter []!!
..und die kriege ich auf teufel komm raus nicht weg!!
(hab schon so einiges probiert!)
damit habe ich schon in kombination mit bedingten anweisungen und zählschleifen gearbeitet-nichts hat mich zum ziel gebracht!
also ich möchte den vektor stoffname_verschieden nur mit den stoffnamen haben und ohne []!!
habt ihr eine idee!?
mfg, waldemar
(@jan: auf basis deines letzten hinweises konnte ich endlich die vektoren
stoffname_versetzt und stoffname_verschieden überhaupt erstellen!
es geht voran!-danke)
_________________
k=1;
length_stoffname_verschieden=length(stoffname_verschieden);
for j=1:length_stoffname_verschieden
if not(isempty(stoffname_verschieden{j}))
stoffnamen{k}=stoffname_verschieden{j}
k=k+1;
else end end
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
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.