String formatieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
haderlump
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

Beitrag von haderlump »

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.

icho2099
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

Beitrag von icho2099 »

strutils.PadRight hilt dir sicher

Mathias
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

Beitrag von Mathias »

Dazu muss der Text genau 20 Zeichen lang sein, Die nicht eingegebenen Stellen sollen Leerzeichen sein.
Evtl. hilft die auch ein ShortString, Dieser String im Beispiel ist immer exakt 20 +1 Zeichen lang. s[0] beinhaltet die Länge.

Code: Alles auswählen

var
  s: string[20];
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

NoCee
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

Beitrag von NoCee »

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:

Code: Alles auswählen

  s1:= '                    ';//20 Leerzeichen
  s2:= 'W123';
  s2:= S2+s1;
  setlength(s2,20); 
dann wird rechts immer mit Leerzeichen aufgefüllt und der String ist immer 20 Zeichen lang.

Gruß
NoCee

Benutzeravatar
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

Beitrag von juelin »

Habe schon vor langer Zeit dazu 2 Funktionen geschrieben.

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;
Gruß
Jürgen

Benutzeravatar
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

Beitrag von Ally »

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
Dateianhänge
UTF8PadRight-Test.zip
(5.17 KiB) 5-mal heruntergeladen

haderlump
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

Beitrag von haderlump »

Danke für die Antworten, das hat mir schon sehr weiter geholfen.

Gruß Fritz

Antworten