Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Zahlen aus String parsen

  Alt 8. Mai 2012, 14:18
Was sind Zahlen?
z.B. inklusive Vorzeichen, Komma, Tausenderseparator und womöglich noch mit Exponent.

TStringArray ... falls es im D7 das schon gibt, dann besser Delphi-Referenz durchsuchenTStringDynArray verwenden, für eine bessere Typkompatibilität.

@angos: Wenn AString mit einer Zahl endet, dann wird diese vergessen.
Also nach der Schleife dieses besser nochmals beachten.
Delphi-Quellcode:
  if sHelp <> 'then
  begin
    SetLength(AStrArray, Length(AStrArray)+1);
    AStrArray[High(AStrArray)] := sHelp;
  end;
Mit Vorzeichen:
Delphi-Quellcode:
function GetNums(const Text: string): TIntegerDynArray;
var
  L, i: Integer;
begin
  SetLength(Result, 1);
  Result[0] := '';
  L := 0;
  for i := 1 to Length(Text) do
    if (Text[i] in ['0'..'9']) or ((Result[L] = '') and (Text[i] in ['+', '-'])
        and (i < Length(Text)) and (Text[i + 1] in ['0'..'9'])) then
      Insert(Text[i], Result[L], Length(Result[L]) + 1) // Result[L] := Result[L] + Text[i]
    else if Result[L] <> 'then begin
      Inc(L);
      SetLength(Result, L + 1);
    end;
  if Result[L] = 'then
    SetLength(Result, L);
end;

// ab D2006/TDE
function GetNums(const Text: string): TIntegerDynArray;
var
  C, V: Char;
  L: Integer;
begin
  SetLength(Result, 1);
  Result[0] := '';
  L := 0;
  V := #0;
  for C in Text do begin
    if C in ['0'..'9'] then begin
      if V in ['+', '-'] then
        Result[L] := V;
      Insert(C, Result[L], Length(Result[L]) + 1);
    end else if Result[L] <> 'then begin
      Inc(L);
      SetLength(Result, L + 1);
    end;
    V := C;
  end;
  if Result[L] = 'then
    SetLength(Result, L);
end;
ohne Vorzeichen
Delphi-Quellcode:
function GetNums(const Text: string): TIntegerDynArray;
var
  L, i: Integer;
begin
  SetLength(Result, 1);
  Result[0] := '';
  L := 0;
  for i := 1 to Length(Text) do
    if Text[i] in ['0'..'9'] then
      Insert(Text[i], Result[L], Length(Result[L]) + 1)
    else if Result[L] <> 'then begin
      Inc(L);
      SetLength(Result, L + 1);
    end;
  if Result[L] = 'then
    SetLength(Result, L);
end;

// ab D2006/TDE
function GetNums(const Text: string): TIntegerDynArray;
var
  C: Char;
  L: Integer;
begin
  SetLength(Result, 1);
  Result[0] := '';
  L := 0;
  for C in Text do
    if C in ['0'..'9'] then
      Insert(C, Result[L], Length(Result[L]) + 1)
    else if Result[L] <> 'then begin
      Inc(L);
      SetLength(Result, L + 1);
    end;
  if Result[L] = 'then
    SetLength(Result, L);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Mai 2012 um 13:35 Uhr)
  Mit Zitat antworten Zitat