Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Format Strings mit festen String längen (https://www.delphipraxis.net/164849-format-strings-mit-festen-string-laengen.html)

Freiwilderer 2. Dez 2011 11:33


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

Bummi 2. Dez 2011 12:06

AW: Format Strings mit festen String längen
 
Delphi-Quellcode:
  Showmessage(Format('%.8s',['Ein langer String']) )

Freiwilderer 2. Dez 2011 12:24

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 ......

Bummi 2. Dez 2011 13:17

AW: Format Strings mit festen String längen
 
Delphi-Quellcode:
Showmessage('"' + Format('%-8.8s',['Ein']) + '"')
Showmessage('"' + Format('%8.8s',['Ein']) + '"')

Freiwilderer 2. Dez 2011 13:22

AW: Format Strings mit festen String längen
 
danke,
perfekt!

Freiwilderer 5. Dez 2011 08:27

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?

DeddyH 5. Dez 2011 08:40

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;

Sir Rufo 5. Dez 2011 08:46

AW: Format Strings mit festen String längen
 
Zitat:

Formatbezeichner werden in der folgenden Form angegeben:
Code:
"%" [Index ":"] ["-"] [Breite] ["." Genauigkeit] Typ

Wenn wir uns jetzt mal deine Werte für Breite und Genauigkeit ansehen
Delphi-Quellcode:
Format('%2.1f', [Zahl])
dann frage ich mich natürlich, wie man die Anzeige von
Delphi-Quellcode:
1.3
bewerkstelligen kann, wenn das nur 2 Zeichen breit sein darf. ;)

Freiwilderer 5. Dez 2011 08:54

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

DeddyH 5. Dez 2011 08:58

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.

Sir Rufo 5. Dez 2011 09:10

AW: Format Strings mit festen String längen
 
Zitat:

Zitat von Freiwilderer (Beitrag 1139401)
@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

Die Hilfe spricht aber ganz klar von der Breite und da steht nix von Vorkommastellen.

Zitat:

Zitat von DeddyH (Beitrag 1139402)
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.

Aber die gibt es doch:
Delphi-Quellcode:
Format('%4.1f', [Zahl])
In Worten heißt das dann:
Zitat:

Liebes Delphi, mach mir mal aus so einem Fließkommawert einen String, der 4 Zeichen breit ist mit einer Genauigkeit von 1 (=1 Nachkommastelle). Ich gebe kein "-"-Zeichen mit, also bitte innerhalb der maximalen Breite rechtsbündig.

DeddyH 5. Dez 2011 09:14

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.

Freiwilderer 5. Dez 2011 09:26

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 ;)

himitsu 5. Dez 2011 09:29

AW: Format Strings mit festen String längen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1139404)
Die Hilfe spricht aber ganz klar von der Breite und da steht nix von Vorkommastellen.

Eigentlich müßte es "Minimalbreite" heißen, damit es verständlicher wird.

Freiwilderer 5. Dez 2011 09:33

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.

DeddyH 5. Dez 2011 09:34

AW: Format Strings mit festen String längen
 
Auf jeden Fall passt %2.1f nicht zur Maske ##.#.

Freiwilderer 5. Dez 2011 09:38

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 08:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz