AGB  ·  Datenschutz  ·  Impressum  







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

String('8.0.0').toInteger

Ein Thema von amigage · begonnen am 28. Jan 2022 · letzter Beitrag vom 29. Jan 2022
Antwort Antwort
Seite 1 von 2  1 2      
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#1

String('8.0.0').toInteger

  Alt 28. Jan 2022, 10:43
Delphi-Version: 11 Alexandria
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.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 11:39
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?
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#3

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 11:49
Ich hätte das eher mit CharInSet oder mit StrVar.Splitt(['.']) gelöst und am Ende dann StrtoInDef verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 12:04
wenn nur major interessant ist, warum nicht nur auf string array erstes feld prüfen?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 12:09
Warum nicht den vorgesehenen Weg gehen:

Delphi-Quellcode:
uses
  System.Sysutils;
TOSVersion.Check(8);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 15:08
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..

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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.443 Beiträge
 
Delphi 12 Athens
 
#7

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 15:22
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 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 15:45
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;
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 16:34
Dann wäre if not TOSVersion.Check(9) then hier besser geeignet.
Stimmt, das hilft in meinem Fall. 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
  Mit Zitat antworten Zitat
wasbo

Registriert seit: 24. Jan 2022
Ort: Bochum
3 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: String('8.0.0').toInteger

  Alt 28. Jan 2022, 21:04
Dann wäre if not TOSVersion.Check(9) then hier besser geeignet.
Stimmt, das hilft in meinem Fall. 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
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.
Walter Schwägerl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:57 Uhr.
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