Einzelnen Beitrag anzeigen

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