AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warum String-Ausgaben mit format?

Ein Thema von Thanatos81 · begonnen am 13. Okt 2006 · letzter Beitrag vom 15. Okt 2006
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: Warum String-Ausgaben mit format?

  Alt 14. Okt 2006, 17:51
Übrigens spricht aus Nichts dagegen, Format zu erweitern bzw. neu zu implementieren. Der Code ist denkbar einfach:
Delphi-Quellcode:
// Hingehackt von Alzaimar irgendwann 2003
Function csFormat(aFormatStr: String; Arg: Array Of Variant): String;
Var
  i, p: Integer;

  Procedure _Format;
  Var
    j, n: Integer;
    r, fmt: String;

  Begin
    Inc(i);
    If aFormatStr[i] = '%Then Begin
      Result := Result + aFormatStr[i];
      Inc(i)
    End
    Else Begin
      If aFormatStr[i] In ['0'..'9'] Then Begin
        j := i; While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
        N := StrToIntDef(Copy(aFormatStr, j, i - j), -1);
        If aFormatStr[i] = ':Then // Index specifier
          p := N
        Else i := j;
      End;
      j := i;
      If aFormatStr[i] = '-Then Inc(i);
      While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
      If aFormatStr[i] = '.Then Inc(i);
      While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
      Inc(i);
      fmt := '%' + Copy(aFormatStr, j, i - j);
      Case upcase(aFormatStr[i - 1]) Of
        'D', 'U', 'X':
          r := Format(fmt, [integer(Arg[p])]);
        'F', 'E', 'G', 'N', 'M':
          r := Format(fmt, [Double(Arg[p])]);
      Else
        r := Format(fmt, [Arg[p]]);
      End;

      Result := Result + r;
      Inc(p);
    End
  End;

Begin
  i := 1;
  p := Low(Arg);
  Result := '';
  While i <= Length(aFormatStr) Do
    If aFormatStr[i] = '%Then
      _Format
    Else {Hier käme der Code für \n \t etc. rein else } Begin
      Result := Result + aFormatStr[i];
      Inc(i)
    End;
End;
NB: Eventuell fehlt etwas, und nicht 100% kompatibel, da die Argumente als 'Variant Array' und nicht als 'Array Of Const' übergeben werdem. Ist aber leicht anzupassen, nur sind die 'Array Of Const' etwas umständlicher zu handhaben.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


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 18:43 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