![]() |
Format Strings mit festen String längen
Moin,
ich versuche gerade mithilfe einer alten DOS Formatvorlagen Datei mir FormatStrings zu basteln. Die alte Datei sieht so aus: 001\ \ Nr.: ######## 002\ \ Telefon: \ \ 003Fahrer Tournummer : ##### Datum: \ \ Leere Stellen zwischen zwei \ sind Platzhalter für Strings und # sind Platzhalter für Zahlen. das sieht dann so aus %-21s Rollkarten-Nr.: %8d %-42s Telefon: %-16s Fahrer Tournummer : %5d Datum: %-8s in der Delphi Hilfe steht zum Thema Formatstrings mit %s folgendes s String. Das Argument muss ein Zeichen, ein String oder ein PChar-Wert sein. Der String bzw. das Zeichen wird anstelle des Formatbezeichners eingefügt. Wenn im Format-String ein Genauigkeitsbezeichner angegeben ist, bestimmt er die maximale Länge des resultierenden Strings. Ist das Argument ein String, der diese Maximallänge überschreitet, wird der String abgeschnitten. Leider wird der Text aber nicht abgeschnitten... das führt zu ziemlichen Problemen. Hat jemand ne Idee, warum das so ist, oder, wie ich en Formatstring ändern kann, dass zu lange Texte abgeschnitten werden? lg |
AW: Format Strings mit festen String längen
Delphi-Quellcode:
Showmessage(Format('%.8s',['Ein langer String']) )
|
AW: Format Strings mit festen String längen
hey, danke.
mit so ner schnellen und direkten antwort hatte ich gar nich gerechnet :) seltsam ist jetzt nur, dass er mir die aber auch nicht mit leerzeichen auffüllt. also im grunde, wenn ich 22 zeichen sage, dann will ich auch genau 22 zeichen haben ;) is alles etwas vertrackt, weil die ausdrucke später eingescannt und automatisch verarbeitet werden ...... |
AW: Format Strings mit festen String längen
Delphi-Quellcode:
Showmessage('"' + Format('%-8.8s',['Ein']) + '"')
Showmessage('"' + Format('%8.8s',['Ein']) + '"') |
AW: Format Strings mit festen String längen
danke,
perfekt! |
AW: Format Strings mit festen String längen
oh man, ähnliches problem mit float ...
Format %2.1f ist immer linksbündig, %-2.1f aber auch, wie bekomme ich das Rechtsbündig? |
AW: Format Strings mit festen String längen
Zur Not 2 mal formatieren.
Delphi-Quellcode:
var
Zahl: double; begin Zahl := Pi; ShowMessage('"' + Format('%8.8s', [Format('%2.1f', [Zahl])]) + '"'); end; |
AW: Format Strings mit festen String längen
Zitat:
Delphi-Quellcode:
dann frage ich mich natürlich, wie man die Anzeige von
Format('%2.1f', [Zahl])
Delphi-Quellcode:
bewerkstelligen kann, wenn das nur 2 Zeichen breit sein darf. ;)
1.3
|
AW: Format Strings mit festen String längen
@DeddyH
Das Problem ist, dass ich pro Zeile nur einmal "Format" habe und dann u.U. 3-5 verschiedene Platzhalter, weshalb ich keine zwei Formatiereungen machen kann. @Sir Rufo ... ich ware igentlich davon ausgegangen, dass das jeweils die anzahl der vor und nachkommastellen angibt also ich will im Grunde Werte zwischen 0 und 99.9 so ausgegen: 1.3 7.1 39.4 45.0 99.8 |
AW: Format Strings mit festen String längen
Du willst doch im Grunde eine String-Formatierung haben, oder? Dann schreib Dir doch eine Funktion, die Dir das Gewünschte liefert und übergib der die vorformatierten Strings.
|
AW: Format Strings mit festen String längen
Zitat:
Zitat:
Delphi-Quellcode:
In Worten heißt das dann:
Format('%4.1f', [Zahl])
Zitat:
|
AW: Format Strings mit festen String längen
Ich dachte, der Ausgangswert (Ganze Zahl, Gleitkommazahl) ist variabel, nur das Ergebnis soll gleich sein, oder habe ich den letzten Post des TE falsch verstanden? Deshalb mein Vorschlag mit der Funktion.
|
AW: Format Strings mit festen String längen
@Sir Rufo, es ist ja so, dass er trotzdem nicht abschneidet, aber ich versuch das mal ;)
@DeddyH Die Funktion, die ich habe, baut mir aus zB. / / Fester Text ######## ##.# einen Formatstring auf, der so aussieht: %+6.6s Fester Text %8d %2.1f der freie Text soll dabei linksbündig, die Zahlen aber rechtsbündig sein und, bis auf das letzte funktionierts ja auch schon ;) |
AW: Format Strings mit festen String längen
Zitat:
|
AW: Format Strings mit festen String längen
Wisst ihr, im Grunde ist es eine alte formularvorlage, die in einem Dos Programm verwendet wurde.
Die ausgedruckten Blätter werden unterschrieben, eingescannt und automatisch verarbeitet. Um den Umstieg zu erleichtern und die Abstimmung mit dem einzuscannenden Programm zu erleichtern (das ist nicht von mir.) habe ich mir gedacht, ich nutze weiterhin die selben Formatdateien. Im Dos wurde so eine Zeile einfach mit Using aufgerufen und der Zeile dann entsprechende Feldinhalte übergeben. Genau so, soll das jetzt auch ablaufen, ich sage: Format (statt using), Zeilennummer und die werte, die in die Zeile gehören. So kann der Kunde weiterhin festtexte etc selber verändern, solang die Anzahl und das Format der Variablen Felder erhalten bleibt. |
AW: Format Strings mit festen String längen
Auf jeden Fall passt %2.1f nicht zur Maske ##.#.
|
AW: Format Strings mit festen String längen
nein, aber %4.1f passt prima, so gehts :D
... wieder was gelern, ... danke :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz