|
|
String an bestimmter Stelle erweitern |
|
King Nothing |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.09.2011, 17:51
Titel: String an bestimmter Stelle erweitern
|
 |
Hi Leute,
ich möchte an der 20. Stelle einer beliebig kürzeren Zeichenkette einen Text einfügen um somit einen dynamischen Zwischenraum zu erzeugen.
zeigt zwar in der Matlab-Kommandozeile (also in der Sofortausgabe) beide Textelemente an - wenn man die Variable allerdings anklickt und öffnet, wird eine 25-stellige Zeichenkette angezeigt, die allerdings nur die ersten Stellen enthält.
führt zur Fehlermeldung: "??? Index exceeds matrix dimensions."
Hat jemand einen Tipp für mich, wie sich das bewerkstelligen lässt?
_Peter_: Bitte Codeumgebung verwenden. Danke.
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 13.09.2011, 17:58
Titel: Re: String an bestimmter Stelle erweitern
|
 |
Hallo King Nothing,
Es gibt in Matlab keine dynamischen Zwischenräume in CHAR-Vektoren.
Die Benutzung von 'text' als Name einer Variablen ist äußerst tückisch, da damit der Befehl mit dem gleichen Namen nicht mehr verwendbar ist. Das führt zu unvorhersehbaren Problemen.
Die Fehlermeldung ist nachvollziehbar, oder? Wenn Du den String mit 4 Buchstaben definierst, kannst Du nicht auf die ersten 19 Buchstaben zugreifen.
Was möchtest Du denn mit einem "dynamischen" Zwischenraum erreichen?
Gruß, Jan
|
|
|
King Nothing |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.09.2011, 18:27
Titel:
|
 |
|
 |
|
Mit "text" habe ich jetzt nur beispielhaft meinen etwas längeren Variablennamen ersetzt, aber danke für die Info.
Klar ist die Fehlermeldung nachvollziehbar, ich habe lediglich gehofft, dass die Zeichenkette automatisch erweitert wird, wie es bei Matrizen der Fall ist. Und das wird sie sogar! Folgender Code funktioniert z.B.:
Auch funktioniert:
Nach dem zweiten Schritt wird allerdings nur 'abc' angezeigt, weil statt einem Leerzeichen einfach "nichts" an vierter Stelle steht. Ersetzt man dieses "nichts" im 3. Schritt durch 'd', wird auch die volle Zeichenkette 'abcde' angezeigt!
Leere Zwischenstellen werden in Matrizen automatisch mit Nullen gefüllt, Zeichenketten jedoch nicht mit Leerzeichen, das wäre jedoch mein Ziel.
Das ganze mache ich, um in einer listbox zwei Spalten darstellen zu können. Damit die zweite Spalte (trotz variabler 1. Spalte) immer an der 20. Stelle anfängt, benötige ich einen dynamischen Leerraum. Dachte eben, dass es einen Befehl gibt, mit dem soetwas möglich ist.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 13.09.2011, 18:45
Titel:
|
 |
Hallo King Nothing,
Zeichenketten sind Matrizen in Matlab. Deswegen werden sie auch exakt gleich behandelt. Ein String ist ein [1 x N] CHAR Vektor. Deshalb steht nicht "nichts" im String, wenn man an spätere Stelle Daten einfügt, sondern Nullen. Und eine Null ist nicht nichts.
Was genau meinst Du mit "anzeigen"? Darauf kommt es nämlich an:
FPRINTF stoppt die Darstellung eines Strings, wenn ein NULL-Wert erreicht wird, als entsprechend den Konventionen in C. DISP stellt dagegen das gesamte Array dar.
Um Leerzeichen einzufügen eignet sich der SPRINTF-Befehl:
Dies setzt den ersten String linksbündig mit mindestens 20 Zeichen Breite ein, wobei mit Leerzeichen aufgefüllt wird.
Gruß, Jan
|
|
|
King Nothing |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.09.2011, 20:15
Titel:
|
 |
Anzeigen möchte ich die Zeichenkette in der Listbox meiner Oberfläche.
Vielen Dank für den Tipp mit sprintf, Jan!
|
|
|
King Nothing |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.09.2011, 15:03
Titel:
|
 |
Jetzt muss ich doch noch einmal nachfragen:
Gibt es eine andere Möglichkeit als das Verwenden einer nichtproportionalen Schrift, um bündige Spalten in einer listbox oder einem edit-Feld zu erzeugen?
Da MS Sans Serif eine proportionale Schrift ist, wird meine Tabelle - wie im angehängten Bild zu sehen - trotz gleichlangen Zeichenketten verzerrt.
Nichtproportionale Schriften sehen nur leider nicht so gut aus, insbesondere wenn in der restlichen Oberfläche MS Sans Serif verwendet wird...
Beschreibung: |
|
 Download |
Dateiname: |
Screenshot.PNG |
Dateigröße: |
5.22 KB |
Heruntergeladen: |
687 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.09.2011, 15:54
Titel:
|
 |
Hallo King Nothing,
Für eine feste Zeiche-Breite benötigst Du eine feste Zeichen-Breite. Ich verwende Andale-Mono, die ich hübscher finde.
Nun kann man in UICONTROLs auch HTML verwenden. Stöbere mal in http://www.undocumentedmatlab.com.
Gruß, Jan
|
|
|
King Nothing |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.09.2011, 19:30
Titel:
|
 |
Ok, wenn es keine andere Möglchkeit gibt, verwende ich eben die Schriftart Monospaced. Andale-Mono ist bei mir seltsamerweise keine Monospace-Schriftart...
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.09.2011, 23:32
Titel:
|
 |
King Nothing,
Seltsam. Dabei steht "Mono" doch extra für die fixe Breite.
Tabellen sind in Matlab nicht trivial. Auch UITABLE hat einige Macken.
Gruß, Jan
|
|
|
King Nothing |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 20.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2011, 00:57
Titel:
|
 |
Keine Ahnung, bei mir wird mit Andale-Mono das Schriftbild genauso verzerrt wie mit MS Sans Serif... Monospaced ist aber auch ok...
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|