![]() |
mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Hallo,
ich steh gerade auf dem Schlauch. Ich habe folgende Bedingungen an einen AnsiString:
Ich habe es mit Insert probiert, als auch mit Format. Aber bei
Delphi-Quellcode:
wird der Text trotzdem länger (irgendwie auch klar) und bei
Insert
Delphi-Quellcode:
(z. B. mit %.3s als Argument) bekomm ich einen Argumentfehler.
Format
Wie kann ich den String zusammenbauen mit den Randbedingungen? Ausser jeden String in einer Schleife durchzugehen und Zeichen für Zeichen im End-String zu positionieren |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Gibt es einige Möglichkeiten. Die erste:
Delphi-Quellcode:
Eine andere:
var
a, b, c, x: String; begin x := '1234567890123456789012345678901234567890'; //40Zeichen a := 'abc'; //3 Zeichen b := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖ'; //28 c := 'äöüß#'; Delete(x, 1, 3); Insert(a, x, 1); x[4] := ' '; Delete(x, 5, 28); Insert(b, x, 5); x[35] := ' '; Delete(x, 36, 5); Insert(c, x, 36); ShowMessage(x); ShowMessage(IntToStr(Length(x))); end;
Delphi-Quellcode:
var
i: Integer; a, b, c, x: String; begin x := '1234567890123456789012345678901234567890'; //40Zeichen a := 'abc'; //3 Zeichen b := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖ'; //28 c := 'äöüß#'; //hier aber vorsicht! zuerst prüfen ob x lang genug ist und nicht überschritten wird for i := 1 to Length(a) do x[1 - 1 + i] := a[i]; x[4] := ' '; for i := 1 to Length(b) do x[5 - 1 + i] := b[i]; x[35] := ' '; for i := 1 to Length(c) do x[36 - 1 + i] := c[i]; ShowMessage(x); ShowMessage(IntToStr(Length(x))); end; |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
ich vergaß zu erwähnen, dass die einzufügenden Strings nicht unbedingt genau die Länge haben, die für sie definiert sind.
Also der erste String z. B. kann 3 Zeichen, muss aber nicht. Momentan mach ich es so:
Delphi-Quellcode:
//auf 40 Zeichen setzen (=max. Länge der Zeile des LCD-Moduls)
SetLength(S_Text, 40); S_Text := StringOfChar(#32, length(S_Text)); for i := 1 to length(S_Linie) do begin If i > 3 then break; S_Text[i] := S_Linie[i]; end; for i := 1 to length(S_Ziel) do begin If i > 39 then break; S_Text[i + 4] := S_Ziel[i]; end; |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Also solange es drunter bleibt ist das zweite Beispiel richtig. Wenn es länger werden kann, dann zuerst prüfen.
|
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Zitat:
|
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Geht auch einfacher:
Delphi-Quellcode:
uses
System.SysUtils, System.StrUtils; ... result := Format('%-3s %-28s %-5s', [LeftStr(a, 3), LeftStr(b, 28), LeftStr(c, 5)]); |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Zitat:
Wieso hab ich das "-Zahl" nicht in der Doku gefunden? :gruebel: |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Weil du es überlesen hast?
Zitat:
![]() |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Zitat:
Zitat:
Und ja - ich gestehe - ich habs echt überlesen! |
AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
Delphi-Quellcode:
result := Format('%-3.3s %-28.28s %-5.5s', [S_Linie, S_Ziel, S_Laenge]);
Für Strings (%s) : - = Linkbündig *. = Minimallänge (aufgefüllt mit Leerzeichen) .* = Maximallänge (mehr wird abgeschnitten) Aber was soll eigentlich ein Argumentfehler sein? Zitat:
Delphi-Quellcode:
S_Text := StringOfChar(#32, 40);
Aber nur noch was zum Prinzipiellen: Falls S_Linie und Co. auch länger sein können, als du es haben sillst, dann jeweils
Delphi-Quellcode:
gegen
S_Linie
Delphi-Quellcode:
, bzw.
Copy(S_Linie, 1, 3)
Delphi-Quellcode:
austauschen.
LeftStr(S_Linie, 3)
Delphi-Quellcode:
PS: In deinem Post #1 kann ich nicht erkennen, was in Stelle 34 rein soll. :gruebel:
S := S_Linie + StringOfChar(' ', 4 - Length(S_Linie))
+ S_Ziel + StringOfChar(' ', 28{30?} - Length(S_Ziel)) + S_Laenge + StringOfChar(' ', 5 - Length(S_Laenge)); 3 + 1 + 28 + 1 + 5 = 38 In #1 hatte ich 29 ausgerechnet, aber auch das reicht noch nicht. Ach ja, du kannst deine Variable "Länge" jetzt auch
Delphi-Quellcode:
nennen. :angle:
S_Länge
Und wieso sind Linie und Länge eigentlich keine Integer? :angle2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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