AGB  ·  Datenschutz  ·  Impressum  







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

Val und zuweisung

Ein Thema von EWeiss · begonnen am 8. Mai 2017 · letzter Beitrag vom 12. Mai 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Val und zuweisung

  Alt 9. Mai 2017, 06:49
Hallo,
wenn das Format bekannt ist, geht es auch anders

sEnable='"2"""'
StringReplace(sEnable,'"','',[rfReplaceAll]
sEnable='2'

TryStrToInt
int=2
Heiko
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Val und zuweisung

  Alt 9. Mai 2017, 07:03
Hallo,
wenn das Format bekannt ist, geht es auch anders

sEnable='"2"""'
StringReplace(sEnable,'"','',[rfReplaceAll]
sEnable='2'

TryStrToInt
int=2
Ja Danke aber das ist nicht bekannt..
Keine Ahnung was der User da in die Textdatei hinein schreibt.
Wenn es falsch ist dann kracht's.

gruss
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
624 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: Val und zuweisung

  Alt 9. Mai 2017, 07:53
Keine Ahnung was der User da in die Textdatei hinein schreibt.
Wenn es falsch ist dann kracht's.
gruss
Ich nutze für sowas folgende Funktion:

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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Val und zuweisung

  Alt 9. Mai 2017, 08:01
Zitat:
Ich glaube nicht, dass bei dem von dir gezeigten Beispiel sEnable nach dem VAL '2' ist
Doch VAL verändert den.

Delphi-Quellcode:
            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;
Wenn sEnable > 0 ist dann wird über VAL sEnable verändert
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

Geändert von EWeiss ( 9. Mai 2017 um 08:11 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Val und zuweisung

  Alt 12. Mai 2017, 00:06
Die Definition der Funktion Val() aus der Delphi-Doku: procedure Val(S; var V; var Code: Integer); Der Parameter "S", (sEnable bei dir) wird nicht als var-Parameter übergeben, und kann nachher nicht anders sein.

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;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Val und zuweisung

  Alt 12. Mai 2017, 00:11
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:
VAL Convert a text to a value.
Und ist gelinde gesagt nicht anderes als ein StrToInt(sEnable)

gruss

Geändert von EWeiss (12. Mai 2017 um 00:14 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Val und zuweisung

  Alt 12. Mai 2017, 06:07
Hallo,
eher ein TryStrToInt, weil keine direkte Exception geworfen wird.
Dazu ist ja der ErrorCode da.

Ansonsten hast du Recht.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:59 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