String formatieren
-
- Beiträge: 190
- Registriert: Fr 18. Jan 2013, 09:29
- OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
- CPU-Target: Celeron
String formatieren
Ich habe folgendes Problem: Der User schreibt einen Text in ein Textfeld.
Dieses muss formatiert vorliegen um es in (nebst anderen Textfeldern)einer Datei zu speichern. Dazu muss der Text genau 20 Zeichen lang sein, Die nicht eingegebenen Stellen sollen Leerzeichen sein.
Also: Ich gebe ein: "W123" hernach soll herauskommen "W123 ". Wie mache ich das am einfachsten?
Man kann das sicher mit einer Schleifenkonstruktion lösen, aber da gibt es doch sicherlich eine einfachere Methode.
Danke schon mal im voraus.
Dieses muss formatiert vorliegen um es in (nebst anderen Textfeldern)einer Datei zu speichern. Dazu muss der Text genau 20 Zeichen lang sein, Die nicht eingegebenen Stellen sollen Leerzeichen sein.
Also: Ich gebe ein: "W123" hernach soll herauskommen "W123 ". Wie mache ich das am einfachsten?
Man kann das sicher mit einer Schleifenkonstruktion lösen, aber da gibt es doch sicherlich eine einfachere Methode.
Danke schon mal im voraus.
-
- Beiträge: 53
- Registriert: Fr 21. Feb 2020, 19:17
- OS, Lazarus, FPC: Win10/64
- CPU-Target: 64 Bit
- Wohnort: Osterholz-Scharmbeck
Re: String formatieren
strutils.PadRight hilt dir sicher
-
- Beiträge: 7002
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: String formatieren
Evtl. hilft die auch ein ShortString, Dieser String im Beispiel ist immer exakt 20 +1 Zeichen lang. s[0] beinhaltet die Länge.Dazu muss der Text genau 20 Zeichen lang sein, Die nicht eingegebenen Stellen sollen Leerzeichen sein.
Code: Alles auswählen
var
s: string[20];
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 175
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: String formatieren
ich würde vermuten daß dann aber nach "W123" Schrott drinsteht.
Ich hab das mal für eine Maschinenkommunikation gebraucht und das
in der Art gelöst:
dann wird rechts immer mit Leerzeichen aufgefüllt und der String ist immer 20 Zeichen lang.
Gruß
NoCee
Ich hab das mal für eine Maschinenkommunikation gebraucht und das
in der Art gelöst:
Code: Alles auswählen
s1:= ' ';//20 Leerzeichen
s2:= 'W123';
s2:= S2+s1;
setlength(s2,20);
Gruß
NoCee
- juelin
- Beiträge: 310
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: String formatieren
Habe schon vor langer Zeit dazu 2 Funktionen geschrieben.
Gruß
Jürgen
Code: Alles auswählen
{
Function Blankweg
entfernt Blanks am Amfang, am Ende
oder am Anfang und Ende von Btextstring
und gibt den String wieder zurück
Eingabefelder
Art (1=am Anfang, 2=am Ende, 3=am Anfang und am Ende)
Btextstring = Text der bearbeitet werden soll
Ausgabefelder
Result = bearbeiteter Btextstring
}
function TForm1.Blankweg(Art: integer; var Btextstring: string): string;
var laenge: integer;
var stelle: integer;
var vari12: integer;
var zeichen: string;
var ausgabe: string;
begin
laenge:=Length(Btextstring);
ausgabe:='';
if laenge > 0 then
begin
ausgabe:=Btextstring;
if ((Art = 1) or (Art = 3)) then
begin
vari12:=0;
for stelle:=1 to laenge do
begin
zeichen:=Copy(Btextstring,stelle,1);
if (vari12 = 0) then
begin
if (zeichen <> ' ') then
begin
vari12:=stelle;
end;
end;
end;
if vari12 > 0 then
begin
zeichen:=Btextstring;
ausgabe:=Copy(zeichen,vari12,laenge-(vari12-1));
end else begin
ausgabe:='';
end;
end;
laenge:=Length(ausgabe);
if laenge > 0 then
begin
if ((Art = 2) or (Art = 3)) then
begin
vari12:=0;
for stelle:=laenge downto 1 do
begin
zeichen:=Copy(ausgabe,stelle,1);
if (vari12 = 0) then
begin
if (zeichen <> ' ') then
begin
vari12:=stelle;
end;
end;
end;
if (vari12 > 0) then
begin
zeichen:=ausgabe;
ausgabe:=Copy(zeichen,1,vari12);
end else begin
ausgabe:='';
end;
end;
end else begin
ausgabe:='';
end;
end;
Result:=ausgabe;
end;
Code: Alles auswählen
{
Function Blankdazu
kürzt den Htextstring auf die Länge vom Lan
oder fügt Blanks in Htextstring dazu bis die Länge von Lan erreicht ist
und gibt den String wieder zurück
Eingabefelder
Pos (1=Anfang vom Text - vor dem Text, 2=Ende vom Text - hinter dem Text)
Lan Länge des Ausgabestring Result
Htextstring = Text der bearbeitet werden soll
Ausgabefelder
Result = bearbeiteter Htextstring
}
function TForm1.Blankdazu(Pos, Lan: integer; var Htextstring: string): string;
var laenge: integer;
var stelle: integer;
var ausgabe: string;
begin
laenge:=Length(Htextstring);
ausgabe:=Htextstring;
if laenge < Lan then
begin
while laenge < Lan do
begin
if Pos = 1 then
begin
ausgabe:=' '+ausgabe;
end else begin
ausgabe:=ausgabe+' ';
end;
laenge:=Length(ausgabe);
end;
end else begin
if laenge > Lan then
begin
if Pos = 1 then
begin
stelle:=laenge-Lan+1;
ausgabe:=Copy(Htextstring,stelle,Lan);
end else begin
ausgabe:=Copy(Htextstring,1,Lan);
end;
end;
end;
Result:=ausgabe;
end;
Jürgen
- Ally
- Beiträge: 285
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: String formatieren
Hallo zusammen,
was bisher noch gar nicht berücksichtigt wurde, ist das auftreten von Sonderzeichen.
Auch hier bietet Lazarus eine Lösung. Analog zu PadRight gibt es auch UTF8PadRight.
Anbei ein Beispiel.
Viele Grüße
Roland
was bisher noch gar nicht berücksichtigt wurde, ist das auftreten von Sonderzeichen.
Auch hier bietet Lazarus eine Lösung. Analog zu PadRight gibt es auch UTF8PadRight.
Anbei ein Beispiel.
Viele Grüße
Roland
- Dateianhänge
-
UTF8PadRight-Test.zip
- (5.17 KiB) 5-mal heruntergeladen
-
- Beiträge: 190
- Registriert: Fr 18. Jan 2013, 09:29
- OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
- CPU-Target: Celeron
Re: String formatieren
Danke für die Antworten, das hat mir schon sehr weiter geholfen.
Gruß Fritz
Gruß Fritz