AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

Ein Thema von Helmi · begonnen am 17. Nov 2012 · letzter Beitrag vom 18. Nov 2012
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 22:23
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;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 22:26
Also solange es drunter bleibt ist das zweite Beispiel richtig. Wenn es länger werden kann, dann zuerst prüfen.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#3

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 22:28
Also solange es drunter bleibt ist das zweite Beispiel richtig. Wenn es länger werden kann, dann zuerst prüfen.
So mach ich es jetzt (siehe meinem 2. Post) - nur vielleicht da ja was einfacheres
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#4

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 22:30
Geht auch einfacher:

Delphi-Quellcode:
uses
  System.SysUtils, System.StrUtils;
...
  result := Format('%-3s %-28s %-5s', [LeftStr(a, 3), LeftStr(b, 28), LeftStr(c, 5)]);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#5

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 22:39
Geht auch einfacher:

Delphi-Quellcode:
uses
  System.SysUtils, System.StrUtils;
...
  result := Format('%-3s %-28s %-5s', [LeftStr(a, 3), LeftStr(b, 28), LeftStr(c, 5)]);
So einfach wollt ich es
Wieso hab ich das "-Zahl" nicht in der Doku gefunden?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 23:46
Weil du es überlesen hast?
Zitat:
Formatbezeichner werden in der folgenden Form angegeben:
"%" [Index ":"] ["-"] [Breite] ["." Genauigkeit] Typ
Jeder Formatbezeichner beginnt mit dem Zeichen %. Auf das Prozentzeichen folgen die folgenden Elemente (in der aufgeführten Reihenfolge):
Ein optionaler Argumentindex-Bezeichner mit dem Offset Null (erstes Element hat den Index 0): [Index ":"].
Eine optionale Angabe für die linksbündige Ausrichtung: ["-"].
Eine optionale Breitenangabe: [Breite].
Eine optionale Genauigkeitsangabe: ["." Genauigkeit].
Das Zeichen für den Konvertierungstyp: Typ.
http://docwiki.embarcadero.com/Libra...ysUtils.Format
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#7

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 17. Nov 2012, 23:49
Weil du es überlesen hast?
Im Büro hätt ich jetzt gesagt:
Zitat:
Weil ich einfach alt werd!


Und ja - ich gestehe - ich habs echt überlesen!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#8

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)

  Alt 18. Nov 2012, 02:17
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:
  SetLength(S_Text, 40);
  S_Text := StringOfChar(#32, length(S_Text));
Das ist ein klein bissl sinnlos/doppeltgemoppelt.
  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 S_Linie gegen Copy(S_Linie, 1, 3) , bzw. LeftStr(S_Linie, 3) austauschen.

Delphi-Quellcode:
S := S_Linie + StringOfChar(' ', 4 - Length(S_Linie))
   + S_Ziel + StringOfChar(' ', 28{30?} - Length(S_Ziel))
   + S_Laenge + StringOfChar(' ', 5 - Length(S_Laenge));
PS: In deinem Post #1 kann ich nicht erkennen, was in Stelle 34 rein soll.

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 S_Länge nennen.

Und wieso sind Linie und Länge eigentlich keine Integer?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Nov 2012 um 02:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 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