Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String('8.0.0').toInteger (https://www.delphipraxis.net/209833-string-8-0-0-tointeger.html)

amigage 28. Jan 2022 09:43

Delphi-Version: 11 Alexandria

String('8.0.0').toInteger
 
Hallo,

unter Andorid nutze ich nachfolgenden Code, um bei bestimmten Android Versionen eine andere Schleife aufzurufen.
Delphi-Quellcode:
If (JStringToString(TJBuild_VERSION.JavaClass.RELEASE).ToInteger() <= 9) then
begin
end;
Ab Android 9 funktioniert es, davor leider nicht, da RELEASE auch Werte wie "8.0.0" oder "7.1.1" haben kann.

Bevor ich mir selbst eine Funktion schreibe, wollte ich fragen, ob es in Delphi auch die Java-Methode String().hasNextInt und String().NextInt gibt?

Danke.

amigage 28. Jan 2022 10:39

AW: String('8.0.0').toInteger
 
Okay, habe mir dann doch die Routine geschrieben:

Delphi-Quellcode:
function MyStrToInt(StrVar: String): Integer;
var
  strArray: TArray<string>;
  i: Integer;
  strI : String;
begin
  try
    Result := strVar.ToInteger;
  except
    strI := '';
    strArray:=TArray<string>.Create('1','2','3','4','5','6','7','8','9','0');
    for i := Low(StrVar) to High(StrVar) do
    begin
      if MatchStr(strVar[i], strArray) then
         strI := strI + strVar[i]
      else
        break;
    end;
    if strI = '' then strI := '0';
    Result := strI.ToInteger;
  end;
end;
Meine Frage: wäre hier etwas zu verbessern/optimieren?

BerndS 28. Jan 2022 10:49

AW: String('8.0.0').toInteger
 
Ich hätte das eher mit CharInSet oder mit StrVar.Splitt(['.']) gelöst und am Ende dann StrtoInDef verwendet.

KodeZwerg 28. Jan 2022 11:04

AW: String('8.0.0').toInteger
 
wenn nur major interessant ist, warum nicht nur auf string array erstes feld prüfen?

Union 28. Jan 2022 11:09

AW: String('8.0.0').toInteger
 
Warum nicht den vorgesehenen Weg gehen:

Delphi-Quellcode:
uses
  System.Sysutils;
TOSVersion.Check(8);

amigage 28. Jan 2022 14:08

AW: String('8.0.0').toInteger
 
Zitat:

Zitat von BerndS (Beitrag 1501339)
Ich hätte das eher mit CharInSet oder mit StrVar.Splitt(['.']) gelöst und am Ende dann StrtoInDef verwendet.

CharInSet wäre eine Alternative. Split() ist nicht flexibel genug, da ich ja genau den Separator kennen müsste..

Zitat:

Zitat von KodeZwerg (Beitrag 1501340)
wenn nur major interessant ist, warum nicht nur auf string array erstes feld prüfen?

In meinem Fall kann Major auch zweistellig sein, oder später auch dreistellig. Zudem sollte die Funktion flexibel sein. Also aus einem String, die ersten Integerwerte lesen.

Zitat:

Zitat von Union (Beitrag 1501341)
Warum nicht den vorgesehenen Weg gehen:

Delphi-Quellcode:
uses
  System.Sysutils;
TOSVersion.Check(8);

Normalerweise ja, aber in meinem Fall möchte ich nicht wissen, ob es genau diese Version des System ist, sondern ob es kleiner 9 ist.

Uwe Raabe 28. Jan 2022 14:22

AW: String('8.0.0').toInteger
 
Zitat:

Zitat von amigage (Beitrag 1501349)
Normalerweise ja, aber in meinem Fall möchte ich nicht wissen, ob es genau diese Version des System ist, sondern ob es kleiner 9 ist.

Dann wäre
Delphi-Quellcode:
if not TOSVersion.Check(9) then
hier besser geeignet.

https://docwiki.embarcadero.com/Libr...SVersion.Check

Zitat:

Returns whether the version of the current operating system is above or equal to a specific value.

Use Check to determine whether the version of the current operating system is above or equal to a specific required version.
Es gibt da auch overloads für zwei oder drei Parameter.

Delphi.Narium 28. Jan 2022 14:45

AW: String('8.0.0').toInteger
 
Zitat:

Zitat von amigage
In meinem Fall kann Major auch zweistellig sein, oder später auch dreistellig. Zudem sollte die Funktion flexibel sein. Also aus einem String, die ersten Integerwerte lesen.

Hat also vermutlich nicht direkt was mit den Werten aus TOSVersion zu tun?

In meinem ollen Delphi 7 (oder auch TurboPascal aus den Anfängen ;-)) ginge das z. B. so:
Delphi-Quellcode:
function GetFirstInteger(s : String) : Integer;
var
  i   : Integer;
  Code : Integer;
begin
  Val(s, i, Code);
  if Code <> 0 then
  begin
    s := Copy(s,1,Code - 1);
    Val(s,i,Code);
  end;
  Result := i;
end;

...

begin
  if GetFirstInteger('8.1.1') < 9 then
  begin
    ShowMessage('Kleiner');
  end else
    ShowMessage('GrößerGleich');
end;

amigage 28. Jan 2022 15:34

AW: String('8.0.0').toInteger
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1501353)
Dann wäre
Delphi-Quellcode:
if not TOSVersion.Check(9) then
hier besser geeignet.

Stimmt, das hilft in meinem Fall. :thumb: Irgendwie dachte ich nur, ich könnte testen, ob es genau diese Version ist. Habe nicht verstanden, dass man es als "ist die Version mindestens VALUE" interpretieren muss :lol:

wasbo 28. Jan 2022 20:04

AW: String('8.0.0').toInteger
 
Zitat:

Zitat von amigage (Beitrag 1501364)
Zitat:

Zitat von Uwe Raabe (Beitrag 1501353)
Dann wäre
Delphi-Quellcode:
if not TOSVersion.Check(9) then
hier besser geeignet.

Stimmt, das hilft in meinem Fall. :thumb: Irgendwie dachte ich nur, ich könnte testen, ob es genau diese Version ist. Habe nicht verstanden, dass man es als "ist die Version mindestens VALUE" interpretieren muss :lol:

Kannst Du doch, schau dir TOSVersion mal an, das ist ein Record mit detaillierten Infos. Besser geht's kaum. "Check" ist doch nur eine Funktion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.
Seite 1 von 2  1 2      

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