Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StrToInt Erorror vermeiden ! (https://www.delphipraxis.net/113373-strtoint-erorror-vermeiden.html)

Delphiturbo 6. Mai 2008 22:23


StrToInt Erorror vermeiden !
 
Hallo
die Freude hält nicht länger und schon ein neues Problem da :mrgreen:

So wird den Wert s1 von ini Datei geholt
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var MyIniFile : TInifile;
begin
MyIniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'MyIniFile.ini');
s1 := MyIniFile.ReadString('Section1','zahl1','nicht gefunden');

MyIniFile.Free;
end;
nun kommt der Code:
Delphi-Quellcode:
// wenn die ini Datei nicht da, kein Problem
// wenn die ini Datei da ist, aber kein Integer und unkonvertierbar zu Integer dann error
if StrToInt(s2) - strToInt(S1) > 10 then // kommt eine Fehlermeldung
Wie kann ich folgendes machen:
Wenn der Inhalt von zahl1 kein Integer und nicht möglich in Integer zu konvertieren
dann soll s1 :='0' ?

Beispiel : 10000x ist z.B. ein String und kann man nicht in Integer konvertieren

Ich möchte s1 auch initialisieren, wenn es nicht in Integer konvertierbar ist !!!

silver-moon-2000 6. Mai 2008 22:27

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von Delphiturbo
Wie kann ich folgendes machen:
Wenn der Inhalt von zahl1 kein Integer und nicht möglich zu Integer zu konvertieren
dann soll s1 :='0' ?

Delphi-Quellcode:
StrToIntDef(s1, 0);

mkinzler 6. Mai 2008 22:30

Re: StrToInt Erorror vermeiden !
 
Oder
Delphi-Quellcode:
if not TryStrToInt( zahl1, s1) then s1 := 0;

Delphiturbo 6. Mai 2008 22:42

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von mkinzler
Oder
Delphi-Quellcode:
if not TryStrToInt( zahl1, s1) then s1 := 0;

Wo gemau kann ich diese einsetzen ?
Delphi findet nicht zahl1!

mkinzler 6. Mai 2008 22:43

Re: StrToInt Erorror vermeiden !
 
Einfach statt StrToInt() verwenden
Zitat:

Delphi findet nicht zahl1!
Zitat:

Wenn der Inhalt von zahl1 kein Integer
Ging davon aus das du einen String zahl1 hast

Delphiturbo 6. Mai 2008 22:50

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von mkinzler
Einfach statt StrToInt() verwenden

Dort darf man nicht !!!

Ich habe versucht so :
Delphi-Quellcode:
begin
if Not FileExists('MyIniFile.ini') then
S4:='0'; // initialisieren
if not TryStrToInt(S1) then s1 := '0'; //Not enough parameters

Muetze1 6. Mai 2008 22:53

Re: StrToInt Erorror vermeiden !
 
Mit anderen Worten: Du hast entweder Aufrufparameter zuviel oder zu wenig. Was sagt denn deine Delphi Hilfe dazu?

mkinzler 6. Mai 2008 22:55

Re: StrToInt Erorror vermeiden !
 
Oder mein Beispiel betrachtet, dort werden auch 2 Parameter verwendet!

silver-moon-2000 6. Mai 2008 22:56

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von Delphiturbo
Zitat:

Zitat von mkinzler
Oder
Delphi-Quellcode:
if not TryStrToInt( zahl1, s1) then s1 := 0;

Wo gemau kann ich diese einsetzen ?
Delphi findet nicht zahl1!

In diesem Fall ist 'zahl1' die variable 's1' der String, den Du aus der Ini Datei ausliest
Zitat:

Zitat von Delphiturbo
Delphi-Quellcode:
s1 := MyIniFile.ReadString('Section1','zahl1','nicht gefunden');

müsste also in etwa so heißen (mkinzler: ich vergreif' mich einfach mal an Deinem Code):
Delphi-Quellcode:
var iS1 : integer;

[...]

if not TryStrToInt( zahl1, iS1) then iS1 := 0;
if StrToInt(s2) - iS1 > 10 then

[OT]
Ich weiß, es ist ungehörig, in einem Fred olötzlich ein anderes Thema oder ein zweites Problem anzuschneiden, aber mein "problem" ist es mir nicht wert, einen Fred dafür aufzumachen

Auf der Suche danach, einen möglichst "komplizierte" Lösung zu finden, bin ich auf Folgendes gestoßen
Delphi-Quellcode:
var s1 : string;
    temp :integer;
begin
  s1 := '10n00';
  edAusgabe.Text := IntToStr(IfThen(TryStrToInt(s1, temp), StrToInt(s1), 0));
Da bekomme ich allerdings, falls s1 keine Zahl darstellt, die Fehlermeldung

EConvertError with message ''10n00' is not a valid integer value'.

Kann mir das jemand vielleicht erklären, falls es nicht zu enervierend ist?
[/OT]

mkinzler 6. Mai 2008 23:01

Re: StrToInt Erorror vermeiden !
 
Da ja das StrToInt() ein Parameter ist, wird die Funktion ja auf jedenfall ausgeführt. IfThen() entscheidet ja nur welchen Parameter als Rückgabewert genommen wird.

Delphiturbo 6. Mai 2008 23:05

Re: StrToInt Erorror vermeiden !
 
Der code ist in ein Button und nicht zusamen in OnCeate
darum kennt Delphi Zahl1 nicht, wenn ich den Teil hier einbaue:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Not FileExists('MyIniFile.ini') then
S4:='0';
if StrToInt(s2) - strToInt(S1) > 10 then
ich kann nicht den Tel oben dazu einfügen
Delphi-Quellcode:
if not TryStrToInt( zahl1, S1) then S1 := 0;

silver-moon-2000 6. Mai 2008 23:06

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von mkinzler
Da ja das StrToInt() ein Parameter ist, wird die Funktion ja auf jedenfall ausgeführt. IfThen() entscheidet ja nur welchen Parameter als Rückgabewert genommen wird.

[OT], das letzte Mal, ich versprechs :mrgreen:
ich dachte anscheinend wieder mal falsch:
IfThen ist "definiert" als:
Delphi-Quellcode:
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer;
begin
  if AValue then
    Result := ATrue
  else
    Result := AFalse;
end;
Ich dachte, dass der Ausdruck, "der in ATrue steht", also IntToStr(s1), nur dann ausgewertet wird, wenn IfThen in den true Zweig springt... wieder was gelernt
[/OT]

Delphiturbo 6. Mai 2008 23:36

Re: StrToInt Erorror vermeiden !
 
wie kann ich feststellen ob ein Wert kein Integer ist ?

silver-moon-2000 6. Mai 2008 23:41

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von Delphiturbo
wie kann ich feststellen ob ein Wert kein Integer ist ?

Hatten wir z.B. in Post 4
Delphi-Quellcode:
if not TryStrToInt( zahl1, s1) then s1 := 0;
Zahl1 ist der String, der umgewandelt werden soll, s1 die Zahl, die "rauskommt"
Wenn Zahl1 eine gültige zahl darstellt, hat TryStrToInt den RückgabeWert true, andernfalls false

-> ergibt TryStrToInt( zahl1, s1) true, ist zahl1 ein gültiger Integer

Muetze1 6. Mai 2008 23:43

Re: StrToInt Erorror vermeiden !
 
Wenn er es nicht wandeln kann? Siehe Delphi-Referenz durchsuchenTryStrToInt()? Wer ist eigentlich Fred?

Delphiturbo 6. Mai 2008 23:48

Re: StrToInt Erorror vermeiden !
 
Gelöst so :
Delphi-Quellcode:
if StrToInt(S0) - StrToIntDef(S1, 0) > 10  then
:mrgreen:

silver-moon-2000 6. Mai 2008 23:55

Re: StrToInt Erorror vermeiden !
 
Zitat:

Zitat von Muetze1
Wenn er es nicht wandeln kann? Siehe Delphi-Referenz durchsuchenTryStrToInt()? Wer ist eigentlich Fred?

Ähmn, hab ich einen Fehler gemacht? Ich hab' einfach den Umkehrschluss gemacht:
Wenn er es wandeln kann, ist's ein Integer, sonst ist es kein Integer.
Ich zitiere OH:
Zitat:

TryStrToInt converts the string S, which represents an integer-type number in either decimal or hexadecimal notation, into a number, which is assigned to Value. If S does not represent a valid number, TryStrToInt returns false; otherwise TryStrToInt returns true.
Kann jedoch sein, dass ich seine Fragestellung falsch aufgefasst habe.

bezüglich Fred (man beachte die smileys)
Das wollte ich schon immer mal sagen:
Benutz' doch mal die SuFu
:mrgreen: :mrgreen:
Tante Google 5. Hit "Thread Fred, 1. Antwort"

[edit]
Argh, roter Kasten, where art thou? sind die roten Kästen eigentlich nur für sehr aktive Mitglieder gedacht? :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.

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