![]() |
Text in 5er Buchstabengruppen anordnen
Ich habe als Ausgang String die Buchstaben enthalten z.B: 'ALDGFHSDKHGIHEBIUHSBIH'. Daraus will ich jetzt 5er Gruppen machen. Wie bekomme ich das hin? Z.B. 'AFJGH AJGHI ALSKD'
Mein Ansatz
Delphi-Quellcode:
Beschriftung 1 und 2 sind strings.
beschriftung := lblout.Caption; // In 5er Gruppen annordnen
beschriftung2 := lblin.Caption; for i := 0 to Length(lblin.Caption) div 5 do begin Insert(' ',beschriftung,i*5); Insert(' ',beschriftung2,i*5); end; lblout.Caption := beschriftung; lblin.Caption := beschriftung2; |
Re: Text in 5er Buchstabengruppen anordnen
|
Re: Text in 5er Buchstabengruppen anordnen
Ok hab ich ... was soll mir das jetzt sagen? Würdest du die Sachen einzeln Rauskopieren und dann löschen oder wie ist das gemeint?
|
Re: Text in 5er Buchstabengruppen anordnen
.. ich weiß ja nicht, ob Du den Ausgangsstring noch behalten willst?
Ich würde immer die ersten 5 Zeichen kopieren und diesen dann aus dem Ausgangsstring löschen. Ohne zu löschen solltest Du die Start- und Endwerte im Copy nach jedem Copy Vorgang anpassen. Grüße Klaus |
Re: Text in 5er Buchstabengruppen anordnen
Mhm ok neuer Versuch:
Delphi-Quellcode:
Macht immer noch Quatsch..
beschriftung := ''; // In 5er Gruppen annordnen
beschriftung2 := ''; for i := 0 to Length(lblin.Caption) div 5 do begin beschriftung := beschriftung + Copy(lblin.Caption,i*5,5) + ' '; beschriftung2 := beschriftung2 + Copy(lblout.Caption,i*5,5) + ' '; end; lblout.Caption := beschriftung; lblin.Caption := beschriftung2; Kann es sein das der lenght Teil nicht den richtigen Wert liefert? Ich stehe gerade echt auf der Leitung :wall: .. bitte um Hilfe. |
Re: Text in 5er Buchstabengruppen anordnen
.. wie schaut denn der Quatsch aus?
im String[0] steht die Länge des Strings, nützliche Daten sind erst ab String[1] da. Grüße Klaus |
Re: Text in 5er Buchstabengruppen anordnen
Zitat:
for i := 0 to und i*5 ergeben aber als ersten Wert eine 0, also müßte überall +1 hinzu. Außerdem willst du doch nur gruppieren/unterteilen und dann benötigst du keine Leerzeichen an erster Stelle und unter Umständen auch nicht an letzter Stelle. Wenn du von Vorne bis Hinten durchgehst und enfügst, dann wird der String um die eingefügten Zeichen Länger (also vor den Einfügestellen) und demnach müßte für jede Einfügung 1 ( i*Length(' ') ) hinzugerechnet werden. Lösung: von hinten beginnen
Delphi-Quellcode:
oder
for i := 1 do (Length(lblin.Caption) - 1) div 5 do
//Insert(' ', beschriftung, i * (5 + Length(' ')) + 1); Insert(' ', beschriftung, i * 6 + 1);
Delphi-Quellcode:
for i := (Length(lblin.Caption) - 1) div 5 downto 1 do
Insert(' ', beschriftung, i * 5 + 1); Zitat:
Wenn nicht, dann benötogst du 2 Schleifen. |
Re: Text in 5er Buchstabengruppen anordnen
Achso hab ich vergessen zu sagen ... ja die sind gleich lang.
Habs jetzt mal so übernommen
Delphi-Quellcode:
Funktioniert aber nicht komplett, obwohl ich deinen Ansatz verstehe (hoffe ich zumindestens :-D ). Was bei rauskommt im Label ist folgendes:
beschriftung := lblin.Caption; // In 5er Gruppen annordnen
for i := (Length(beschriftung) - 1) div 5 downto 1 do Insert(' ', beschriftung, i * 5 + 1); lblin.Caption := beschriftung; AAAAA A A A AA A AAA So in dem Muster ca. Es scheint nur in der ersten Zeile zu funktionieren. Ich weiß nicht wo er da die Zeilenumbrüche her hat. Hab wordwrap auf true... kann das damit zusammenhängen? |
Re: Text in 5er Buchstabengruppen anordnen
Zitat:
Wann immer es geht: keine Daten aus Memo/RichEdit/edit/Label lesen, da für die Anzeige die Daten modifiziert werden. Gruß K-H |
Re: Text in 5er Buchstabengruppen anordnen
Mhm aber wie soll ich dann den Text verändern?
|
Re: Text in 5er Buchstabengruppen anordnen
Mal so ganz grundsätzlich:
Man sollte die Aufgabe "Text in 5er Buchstabengruppen anordnen" nicht direkt auf den Labels ausführen sondern eine saubere Funktion schreiben.
Delphi-Quellcode:
Ohne eine eigene Funktion sieht der Sourcecode wie ein Haufen Müll aus; man weiss eine Woche später nicht mehr was da eigentlich gemacht wird.
function Mach5erGruppen(const text:string):string;
var i:integer; begin Result := text; for i := (Length(text) - 1) div 5 downto 1 do Insert(' ', result, i * 5 + 1); end; |
Re: Text in 5er Buchstabengruppen anordnen
Ok war noch ein ganz einfacher Logikfehler drin. Das ganze wird ja mehrmals auf den gleichen String losgelassen. Dabei zählt der dann bereits vorhandene Leerzeichen mit. So hier die funktionierende neue Fassung:
Delphi-Quellcode:
function buchstaben5ergruppen(const text: string): string;
var i: Integer; begin Result :=''; for i := 1 to Length(Text) do begin if text[i] <> ' ' then Result := Result + text[i]; end; for i := (Length(text)-1) div 5 downto 1 do begin Insert(' ', result, i*5 +1); mmotest.Text := mmotest.Text + Result; end; end; |
Re: Text in 5er Buchstabengruppen anordnen
Length(text) gibt noch die alte Länge, inkl. der Leerzeichen an, wärend die "neue" Länge nötig wäre.
Delphi-Quellcode:
function buchstaben5ergruppen(const text: string): string;
var i: Integer; begin Result := StringReplace(Text, ' ', '', [rfReplaceAll]); for i := (Length(Result) - 1) div 5 downto 1 do Insert(' ', Result, i * 5 + 1); end; |
Re: Text in 5er Buchstabengruppen anordnen
Wie wäre es denn so? Ich hab allerdings nicht sonderlich getestet, es kann also noch Fehler enthalten:
Delphi-Quellcode:
function GroupString(const text: string; CountPerGroup: integer;
EliminateSpaces: Boolean = true): string; var i, j: integer; begin SetLength(Result, Length(text) + Length(text) div CountPerGroup); j := 0; for i := 1 to Length(text) do if not EliminateSpaces or (text[i] <> ' ') then begin inc(j); Result[j] := text[i]; if Succ(j) mod Succ(CountPerGroup) = 0 then begin inc(j); Result[j] := ' '; end; end; SetLength(Result,j); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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