![]() |
Val und zuweisung
Ich habe einen string den ich mit VAL konvertieren muss.
Delphi-Quellcode:
Den möchte ich jetzt so auslegen das als Ergebnis die 2 herauskommt..
var
sEnable: string begin sEnable := '"2"""'; VAL(... ?? end; Wie geht's? Komme mit der Funktion nicht so richtig klar. EDIT: Habe es selbst herausgefunden ;)
Delphi-Quellcode:
Nach Val ist sEnable = "2"
var
sEnable: string int: Integer; ErrorPos: Integer; begin sEnable := '"2"""'; VAL(sEnable, Int, Errorpos); if errorPos = 0 then if sEnable = '2' then // RecycleBin begin EnableFlag := StrToInt(sEnable); end; end; gruss |
AW: Val und zuweisung
Zitat:
Ich sehe nicht, wie "2""" eine Zahl sein soll. |
AW: Val und zuweisung
Zitat:
gruss |
AW: Val und zuweisung
Hallo,
wenn das Format bekannt ist, geht es auch anders sEnable='"2"""' StringReplace(sEnable,'"','',[rfReplaceAll] sEnable='2' TryStrToInt int=2 |
AW: Val und zuweisung
Zitat:
Keine Ahnung was der User da in die Textdatei hinein schreibt. Wenn es falsch ist dann kracht's. gruss |
AW: Val und zuweisung
Zitat:
@EWeiss: Ich glaube nicht, dass bei dem von dir gezeigten Beispiel sEnable nach dem VAL '2' ist, weil VAL den übergebenen String nicht verändert (S ist kein var Parameter). Und auspropieren zeigte, zumindest bei mir, dass sEnable nach dem VAL tatsächlich unverändert ist. |
AW: Val und zuweisung
Zitat:
Delphi-Quellcode:
{ Konvertiert den String in eine Zahl, überliest dabei andere Buchstaben.
So liefert SloppyStrToIntDef('Länge: 15 cm', 0) als Ergebnis die Zahl 15. Unterbrochene Ziffernfolgen werden allerdings nicht zusammengefügt, so dass SloppyStrToIntDef('1 2 3 4 5', 0) die Zahl 1 liefert und nicht etwa 12345. } function SloppyStrToIntDef(const s: string; default: integer): integer; var i: integer; tmp: string; flag: (vorZahl, inZahl, nachZahl); begin tmp := ''; flag := vorZahl; for i:=1 to Length(s) do begin if CharInSet(s[i], ['0'..'9']) then begin if flag = vorZahl then begin flag := inZahl; tmp := tmp + s[i]; end else if flag = inZahl then tmp := tmp + s[i] else break; end else begin if flag = inZahl then flag := nachZahl end end; result := StrToIntDef(tmp, default); end; |
AW: Val und zuweisung
Zitat:
Delphi-Quellcode:
Wenn sEnable > 0 ist dann wird über VAL sEnable verändert
sEnable := Trim(ParseThis(sBF, ',', 5));
if Length(sEnable) = 0 then EnableFlag := 1 else VAL(sEnable, Int, Errorpos); if Errorpos = 0 then EnableFlag := StrToInt(sEnable); if EnableFlag = 2 then // RecycleBin begin sUseThumb := ExtractFilePath(sUseThumb); if SHGetRecycleBinCount > 0 then begin sUseThumb := sUseThumb + 'RecycleBinFull.png'; gp.RecycleBinFull := true; end else begin sUseThumb := sUseThumb + 'RecycleBinEmpty.png'; gp.RecycleBinFull := false; end; end; und zwar so wie gezeigt von '"2"""' zu '2' OK.. Muss jetzt in die Kiste! Werde das nochmal überdenken. Zu viel Probleme im Moment. Danke. gruss |
AW: Val und zuweisung
Die Definition der Funktion Val() aus der Delphi-Doku:
Delphi-Quellcode:
Der Parameter "S", (sEnable bei dir) wird nicht als var-Parameter übergeben, und kann nachher nicht anders sein.
procedure Val(S; var V; var Code: Integer);
Zudem sehe ich noch ein Problem in deinem Code: Was machst du, wenn Errorpos <> 0 ist? Eigentlich müsste der Compiler warnen, dass EnableFlag undefiniert sein könnte. (Wenn wir hier den gesamten Code sehen.)
Delphi-Quellcode:
sEnable := Trim(ParseThis(sBF, ',', 5));
if Length(sEnable) = 0 then EnableFlag := 1 // Wenn Wert nicht gesetzt, 1 als Standard nehmen else VAL(sEnable, Int, Errorpos); // Wenn dennoch irgendwas im String ist, versuchen eine Zahl daraus zu lesen if Errorpos = 0 then EnableFlag := StrToInt(sEnable); // Wenn kein Fehler beim Interpretieren als Zahl war, umwandeln. // ABER! Unnötig. Die erkannte Zahl steht bereits in "Int" aus dem VAL()-Aufruf! // Vor allem aber: Was machst du, wenn Errorpos NICHT 0 ist, also KEINE Zahl erkannt wurde? Nichts! EnableFlag // wird nichts neues zugewiesen, es wird kein Fehler ausgelöst, nichts. Du machst einfach weiter unter der Annahme, // dass die Zahl richtig erkannt wurde. Was auch immer nachher in EnableFlag drin steht. // // Würde sEnable also in der ersten Zeile als '"2""' herauskommen, sollte Errorpos = 1 sein, und in EnableFlag steht // NUR DANN eine 2, wenn irgendwo vorher an einer anderen Stelle eine 2 rein geschrieben wurde. NUR dann. Step das mal durch. if EnableFlag = 2 then // RecycleBin begin sUseThumb := ExtractFilePath(sUseThumb); if SHGetRecycleBinCount > 0 then begin sUseThumb := sUseThumb + 'RecycleBinFull.png'; gp.RecycleBinFull := true; end else begin sUseThumb := sUseThumb + 'RecycleBinEmpty.png'; gp.RecycleBinFull := false; end; end; |
AW: Val und zuweisung
Das hat sich erledigt und war Humbug ;) krass ausgedrückt Schwachsinn. (Meinerseits)
Der Val Parameter den ich meine aus VB Zeiten tut nichts anderes als ein String in einem Integer zu konvertieren Ich wollte das jetzt anwenden und habe da wohl die falsche Funktion erwischt. ;) Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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