Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   StringList Buchstaben verbieten? (https://www.delphipraxis.net/192430-stringlist-buchstaben-verbieten.html)

zobien123 18. Apr 2017 11:52

AW: StringList Buchstaben verbieten?
 
Wow vielen Danke für den ganzen Input:-D

Hab es jetzt so gemacht:
Zitat:

Das könnte man vermutlich noch effizienter machen, wenn man direkt die ASCII Randwerte '0' und '9' vergleicht.
Das klang für mich am einfachsten :stupid:

Christian Seehase 18. Apr 2017 11:56

AW: StringList Buchstaben verbieten?
 
Moin Zusammen,

um die Verwirrung zu komplettieren:
Wenn es sich um reine Ordnernamen handelt, also ohne Pfadtrenner
könnte man auch TryStrToInt verwenden

DeddyH 18. Apr 2017 12:02

AW: StringList Buchstaben verbieten?
 
Aber auch nur, solange die Zahl nicht zu groß ist.

Blup 18. Apr 2017 16:13

AW: StringList Buchstaben verbieten?
 
Das ist doch mal eine Möglichkeit einen Enumerator zu verwenden:
Delphi-Quellcode:
type
  TNumericEnumerator = record
    constructor Create(AList: TStrings);
  private
    FIndex: Integer;
    FList: TStrings;
    function Accept(const AItem: string): Boolean; inline;
    function GetCurrent: string; inline;
  public
    function MoveNext: Boolean; inline;
    property Current: string read GetCurrent;
    function GetEnumerator: TNumericEnumerator;
  end;

{ TNumericEnumerator }

function TNumericEnumerator.Accept(const AItem: string): Boolean;
const
  NUMBERS = ['0'..'9'];
var
  i: Integer;
begin
  for i := 1 to Length(AItem) do
  begin
    if not (AItem[i] in NUMBERS) then
    begin
      Result := False;
      Exit;
    end;
  end;
  Result := True;
end;

constructor TNumericEnumerator.Create(AList: TStrings);
begin
  FList := AList;
end;

function TNumericEnumerator.GetCurrent: string;
begin
  Result := FList[FIndex];
end;

function TNumericEnumerator.GetEnumerator: TNumericEnumerator;
begin
  Result := Self;
end;

function TNumericEnumerator.MoveNext: Boolean;
var
  i: Integer;
begin
  for i := FIndex + 1 to FList.Count - 1 do
  begin
    if Accept(FList[i]) then
    begin
      FIndex := i;
      Result := True;
      Exit; // ==>
    end;
  end;
  Result := False;
end;

{ Anwendung}

procedure TuWas(AList: TStrings);
var
  s: string;
begin
  for s in TNumericEnumerator.Create(AList) do
    TuWasMitNumeric(s);
end;

hoika 18. Apr 2017 16:23

AW: StringList Buchstaben verbieten?
 
Hallo,
TryStrToInt wäre auch meine erste Wahl.

Ich nehme mal an, dass die Ziffern dann wohl noch ein Rolle spielen (Sortierung?),
dann spielt das Argument "Länge" (max. 4Mrd.) keine Rolle,
weil ja eh in Integer umgeformt werden muss.

BrightAngel 18. Apr 2017 16:29

AW: StringList Buchstaben verbieten?
 
Zitat:

Zitat von hoika (Beitrag 1368130)
...weil ja eh in Integer umgeformt werden muss.

Muss es das? Aber ja, ist definitiv eine Möglichkeit, wenn man das vorhat :thumb:

himitsu 18. Apr 2017 21:53

AW: StringList Buchstaben verbieten?
 
Zitat:

Zitat von BrightAngel (Beitrag 1368131)
Zitat:

Zitat von hoika (Beitrag 1368130)
...weil ja eh in Integer umgeformt werden muss.

Muss es das? Aber ja, ist definitiv eine Möglichkeit, wenn man das vorhat :thumb:

Wenn die Zahlen gleich viele Ziffern haben, bzw. links mit 0 aufgefüllt wurden,
dann könnte man sie auch direkt als Text/String vergleichen.

Blup 19. Apr 2017 09:15

AW: StringList Buchstaben verbieten?
 
Es gibt auch "TryStrToInt64()", wenn es ein par Ziffern mehr sein dürfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz