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 zerlegen um Zahlenpaare zu bekommen

 

Michael2000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2012, 16:29     Titel: String zerlegen um Zahlenpaare zu bekommen
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem: Ich möchte einen String in mehrere Paare aus Zahlen umwandeln. Die Zahlenpaare können entweder aus nur einer Zahl (nicht wirklich ein Paar) bis hin zu 6 Zahlen bestehen. Hier ein Beispiel zur Verdeutlichung:

Code:
% string aus svg file
path.raw = 'M100.111,720.688l0.479-0.474v-0.72 l0.241-0.956l1.434-0.241v-1.43 c1.916-3.732-0.952-6.006-2.387-8.831l-1.191-1.671V722.6z';


Mit M beginnt der String, gefolgt von x/y Koordinate, ab dann kann in loser Reihenfolge folgendes vorkommen: Die Buchstaben m, l, h,v,c, z (groß oder klein geschrieben) jeweils gefolgt von min. einer und max. 6 Zahlen. Positive Zahlen sind durch Komma getrennt, negative durch ein Minus.

Ich möchte nun ein Struct mit separierten Buchstaben und Zahlen (jede Zahl einzeln dem vorausgegangenen Buchstaben zuordenbar). Folgenden Code habe ich schon. Es wird ein Struct path erzeugt, dann trenne ich mit regexp an den Buchtsaben und erhalte path.pairs und path.attributes. Nun habe ich kleinere strings, die weiter zerlegt werden müssen. Dies wollte ich über str2num machen (siehe for-Schleife). Und genau da ist der Haken. Sobald Minuszeichen auftauchen werden die zahlen nicht separat ausgegeben, sondern aufaddiert/subtrahiert. Siehe z.B. path.coordinate(7).

Code:
% string aus svg file
path.raw = 'M100.111,720.688l0.479-0.474v-0.72 l0.241-0.956l1.434-0.241v-1.43 c1.916-3.732-0.952-6.006-2.387-8.831l-1.191-1.671V722.6z';

% Definieren der relevanten Buchstaben
pattern = 'm|l|h|v|c|z|M|L|H|V|C|Z';

% Trennen der einzelnen Koordinatenpaare
[path.pairs path.attributes] =  regexp(path.raw, pattern,'split','match');

% Achtung das M am Anfang erzeugt einen leeren String in path.pairs der gelöscht werden muss
path.pairs(1)=[];

% Ersetzen von "-" durch ",-"; Evtl nicht nötig?
path.pairs_new = regexprep(path.pairs,'-','; -');

% Ersetzen von "," durch ";"; Evtl nicht nötig?
path.pairs_new = regexprep(path.pairs_new,',', '; ');


% Schleife über alle Koordinatenstrings um Zahlen herauszulösen
for i=1:length(path.pairs)
    path.coordinate(i).coordinates = str2num(path.pairs{i});
end



Wie bekomme ich jede Zahl einzeln anstatt einer Aufsummierung in ein Feld?

Vielen Lieben Dank für eure Hilfe
Grüße
Michael


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.01.2012, 17:22     Titel:
  Antworten mit Zitat      
Hallo

mache vorher eine Ersetzung

Code:

path.raw = regexprep(path.raw,'(\d)-','$1,-');

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Michael2000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 15:30     Titel: Danke
  Antworten mit Zitat      
Denny,

vielen Dank für deine Hilfe. Nur eine Frage noch: Was bedeutet $1. Ich konnte bereits rausfinden, dass \d für eine beliebige Ziffer steht, aber zu $1 konnte ich nichts finden.

Danke schonmal im Voraus
Michael
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 31.01.2012, 16:28     Titel:
  Antworten mit Zitat      
Hallo,
das steht fürs Argument aus Pattern.

REGEXPREP macht ja eine Ersetzung in String.
Ich suche ja nach folgenden Pattern: "Beliebige Zahl und Minuszeichen".
Ich will das Pattern durch "Komma und Minuszeichen" ersetzen.
Das Problem dabei ich habe eine Zahl in Pattern, welche ich verlieren würde.
Also muss ich durch Klammern (\d) verdeutlichen, dass es sich um ein Argument handelt. Und $1 sage dass es erstes Argument sei, was übernommen werden muss.
Dann verlieren ich keine Zahl mehr.
Sicher man konnte einfach nur Minus durchs Komma ersetzen, aber dann kämen wohl an anderer Stelle Probleme, wo Minus vor keiner Zahl stünde.
Deswegen musste ich explizit nach einer Zahl abfragen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Michael2000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 16:40     Titel: Danke
  Antworten mit Zitat      
Vielen Dank
 
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.