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

Fixe Länge von Strings

 

dani1632
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 28.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2009, 13:26     Titel: Fixe Länge von Strings
  Antworten mit Zitat      
Hallo!

Ich arbeite in meinem Programm mit Strings, welche ich mit der funktion num2str erzeugt habe, d.h. die Strings stellen Werte dar, die vorher doubles waren. Manche Werte sind ganz (z.B. 1,2,3..., manche sind aber Kommazahlen mit verschieden langen Kommastellen, z.B. 1,2345; 1,560789234; ...

Die Strings sind also alle verschieden lang, je nach dem, wieviele Kommastellen die Zahl hatte.

Mein Ziel ist es nun, die Strings alle auf die gleiche Länge zu bringen (z.B. länge 5). Wenn ein String weniger als 5 Zeichen hat, soll der Rest mit Leerzeichzen aufgefüllt werden, wenn er mehr als 5 Zeichen hat, soll der Rest verworfen werden.

Hat jemand eine Idee wie das am Besten gehen könnte? Gibt es dafür eine vorgefertigte Funktion in Matlab? Oder ist es besser, noch bevor ich die Werte in Strings umwandle (num2str) irgendwie auf die gewünschte Länge zu kommen? Ich habe es mit "format" probiert, das ist aber nur für die ausgabe entscheidend....

Ich muss die werte in Strings umwandeln, da ich sie mit fwrite in ein Textfile schreibe...

Bitte um Hilfe!
DANKE!!!
Lg

Zuletzt bearbeitet von dani1632 am 20.04.2009, 14:20, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 20.04.2009, 14:03     Titel:
  Antworten mit Zitat      
Hi,

Meinst du so:?

Code:

A='123456789';
A=[A;A];
Out=A(:,1:5);
 


Grüße,

der Oli

Zuletzt bearbeitet von derOli am 20.04.2009, 15:37, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
dani1632
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 28.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2009, 14:36     Titel:
  Antworten mit Zitat      
Hi,

Nein, es ist so: In einer Forschleife mit x durchläufen wird bei jedem Durchlauf ein neuer String in die Variable str geschrieben. Diese Variable str wird dann in ein Textfile geschrieben. Die Variablen werden bei jedem Durchlauf untereinander geschrieben, d.h. es wäre schön, wenn alle Strings die gleiche Länge haben, damit es eine schöne Form ergibt.

Es sollte jeder String die gleiche Länge haben...

Dein beschriebener Code funktioniert so nicht, hat aber auch keinen zusammenhang mit meinem Problem...

hab ein Textfile angehängt, damit besser ersichtlich ist was gemeint ist:
Es geht um die Zeilen 26 bis 72; Bei SliceNormalVector sollten die Werte auch unter Sag, Cor und Tra stehen... Die Strings haben aber in diesem Fall nur die Länge eins; es sollte nun anstatt 0 0.0000 stehen bzw statt 1 1.0000 ; Ich schreibe die Informationen zu SlicePosition und SliceNormalVector mit der selben Routine raus, deswegen kann ich da nicht einfach blanks einfügen, da sich sonst die oberen werte bei Slice Position auch verschieben würden....

DANKE, LG

Parameters.txt
 Beschreibung:

Download
 Dateiname:  Parameters.txt
 Dateigröße:  3.62 KB
 Heruntergeladen:  603 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 20.04.2009, 16:00     Titel:
  Antworten mit Zitat      
Hi,

Zitat:
Wenn ein String weniger als 5 Zeichen hat, soll der Rest mit Leerzeichzen aufgefüllt werden, wenn er mehr als 5 Zeichen hat, soll der Rest verworfen werden.


Von daher handelt es sich jetzt um ein anderes Problem.

Zitat:
Dein beschriebener Code funktioniert so nicht, hat aber auch keinen zusammenhang mit meinem Problem...

Hab den Zahlendreher korrigiert, wegen dem Problem siehe oben.

Für dein jetziges Problem fällt mir auf anhieb keine elegante Lösung ein. Könnte man z.b. so machen:


Code:

A = 1
B = num2str(A,'%01.5f')
C = B(1:5)
 


Funktioniert auch wie oben als Vektor. Wenn es geht würde ich die For Schleifen weglassen und alles als Vektor machen.

Ich sehe in diesem Problem noch 2 schwierige Sachen:

1. Es kann zu Ausgaben wie z.B. 5000. kommen also der dezimalpunkt ohne nachkommastellen.

2. Aufgrund von schöner lesbarkeit variert man die Kommastellen. Die Daten sind danach meiner Meinung nach stark korrupiert und für weitere Statistischen Untersuchungen schlecht geeignet. Besser: eine gute und sinnvolle Formatierung mit fprintf oder ähnlichem.

Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
dani1632
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 28.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2009, 17:48     Titel:
  Antworten mit Zitat      
Perfekt!

Ich danke dir, dein Codevorschlag ist super!!!
Das mit dem Komma, dass dann nicht alle Kommas untereinander stehen, ist nicht so schlimm, das reicht mir so!

Danke nochmal!!!! Wink
LG
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.