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
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Val und zuweisung

  Alt 8. Mai 2017, 23:03
Ich habe einen string den ich mit VAL konvertieren muss.
Delphi-Quellcode:
var
 sEnable: string
begin
  sEnable := '"2"""';
  VAL(... ??
end;
Den möchte ich jetzt so auslegen das als Ergebnis die 2 herauskommt..
Wie geht's?

Komme mit der Funktion nicht so richtig klar.

EDIT:
Habe es selbst herausgefunden

Delphi-Quellcode:
var
 sEnable: string
 int: Integer;
 ErrorPos: Integer;
begin
  sEnable := '"2"""';
  VAL(sEnable, Int, Errorpos);
  if errorPos = 0 then
    if sEnable = '2then // RecycleBin
    begin
      EnableFlag := StrToInt(sEnable);
    end;
end;
Nach Val ist sEnable = "2"

gruss

Geändert von EWeiss ( 8. Mai 2017 um 23:18 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Val und zuweisung

  Alt 8. Mai 2017, 23:12
Ich habe einen string den ich mit VAL konvertieren muss.
Delphi-Quellcode:
var
 sEnable: string
begin
  sEnable := '"2"""';
  VAL(... ??
end;
Schau mal in die Hilfe: S is a string-type expression; it must be a sequence of characters that form a signed real number.
Ich sehe nicht, wie "2""" eine Zahl sein soll.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Val und zuweisung

  Alt 8. Mai 2017, 23:13
Ich habe einen string den ich mit VAL konvertieren muss.
Delphi-Quellcode:
var
 sEnable: string
begin
  sEnable := '"2"""';
  VAL(... ??
end;
Schau mal in die Hilfe: S is a string-type expression; it must be a sequence of characters that form a signed real number.
Ich sehe nicht, wie "2""" eine Zahl sein soll.
Siehe mein Edit..

gruss
  Mit Zitat antworten Zitat
hoika

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

AW: Val und zuweisung

  Alt 9. Mai 2017, 07: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
 
#5

AW: Val und zuweisung

  Alt 9. Mai 2017, 08: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
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Val und zuweisung

  Alt 9. Mai 2017, 08:49
Ich habe einen string den ich mit VAL konvertieren muss.
Delphi-Quellcode:
var
 sEnable: string
begin
  sEnable := '"2"""';
  VAL(... ??
end;
Den möchte ich jetzt so auslegen das als Ergebnis die 2 herauskommt..
Wie geht's?

Komme mit der Funktion nicht so richtig klar.

EDIT:
Habe es selbst herausgefunden

Delphi-Quellcode:
var
 sEnable: string
 int: Integer;
 ErrorPos: Integer;
begin
  sEnable := '"2"""';
  VAL(sEnable, Int, Errorpos);
  if errorPos = 0 then
    if sEnable = '2then // RecycleBin
    begin
      EnableFlag := StrToInt(sEnable);
    end;
end;
Nach Val ist sEnable = "2"

gruss

@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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Frickler

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

AW: Val und zuweisung

  Alt 9. Mai 2017, 08: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
 
#8

AW: Val und zuweisung

  Alt 9. Mai 2017, 09: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 09:11 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Val und zuweisung

  Alt 12. Mai 2017, 01: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
 
#10

AW: Val und zuweisung

  Alt 12. Mai 2017, 01: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 01:14 Uhr)
  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 17:44 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