Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi strtoint gibt 0 zurück (https://www.delphipraxis.net/140573-strtoint-gibt-0-zurueck.html)

JPSelter 21. Sep 2009 10:51


strtoint gibt 0 zurück
 
Hätte nicht gedacht, dass mir folgendes solche Probleme macht:

Code:
ein_string:='42';
ein_integer:=strtoint(ein_string);
Das Ergebnis von ein_integer ist 0 und nicht 42. Nur wieso?

TeronG 21. Sep 2009 10:53

Re: strtoint gibt 0 zurück
 
Evtl. "Anti-Fans" von Anhalter bei Borland!? :duck:

Klaus01 21. Sep 2009 10:55

Re: strtoint gibt 0 zurück
 
Hallo,

welche Delphi Version nutzt Du?

Was für ein Typ ist ein_string? (AnsiString, String, WideString)?

Grüße
Klaus

mirage228 21. Sep 2009 10:55

Re: strtoint gibt 0 zurück
 
Delphi 7 Prof und es geht ohne Probs:
Delphi-Quellcode:
var
 ein_string: string;
 ein_integer: integer;
begin
  ein_string:='42';
  ein_integer:=strtoint(ein_string);
  ShowMessageFmt('%d', [ein_integer]);
end;
Ausgabe ist '42'...

himitsu 21. Sep 2009 10:57

Re: strtoint gibt 0 zurück
 
Hast du "ein_integer" auch nach der Zuweisung verwendet?
(also nicht nur genau diesen Code und dann versucht es im Debugger auszulesen

JPSelter 21. Sep 2009 11:16

Re: strtoint gibt 0 zurück
 
Hier der Originalcode:

Code:
var zeile,i: integer;
    tag,monat,jahr: integer;
    temp,temptag: string;

temp:=Excel.Cells[zeile,1].value;
temptag:=temp[1]+temp[2];
tag:=strtoint(temptag);
Ich öffne eine Exceltabelle und lese eine Zelle aus, in der ein Datum steht. Dieses Datum möchte ich mit einer anderen Zeit im Unix-Format vergleichen, muss aber den Umweg über einen integer gehen (lassen wir das mal so dahingestellt). Ich nehme mir also das erste und zweite Zeichen und mache daraus einen integer-Wert, den ich danach umrechne nach Unixtime. Aber es kommt immer 0 raus... die Werte davor sind aber ok.

Wolfgang Mix 21. Sep 2009 11:21

Re: strtoint gibt 0 zurück
 
Bei D2005 ergibt sich auch 42.

Gruß

Wolfgang

himitsu 21. Sep 2009 11:35

Re: strtoint gibt 0 zurück
 
wie gesagt, wenn du Tag nicht verwendest, wird es von Compiler, im Zuge der Codeoptimierung, schnell mal entfernt
und da es dann diese Variable nicht mehr gibt, zeigt der Debugger "Mißt" an.

TeronG 21. Sep 2009 11:42

Re: strtoint gibt 0 zurück
 
Wie "siehst" du denn, dass da Müll drinnen steht?
Nur über den Debugger?

Teste doch mal sowas aus...

Delphi-Quellcode:
MessageDlg(temptag, mtWarning, [mbOK], 0);
oder
Caption := temptag
oder
...
Wie himitsu schon sagte macht Delphi die "witzigsten" Sachen im Hintergrund.

hoika 21. Sep 2009 11:48

Re: strtoint gibt 0 zurück
 
Hallo,

Zitat:

temp[1]+temp[2];
nehme mir also das erste und zweite Zeichen
Hast du den Wert von temptag mal im Debugger geprüft ?

Ich würde das per Copy machen

Delphi-Quellcode:
temptag:= Copy(temp, 1, 2);
Ausserdem würde ich Präfixe verwenden:
Delphi-Quellcode:
var
  iRow: iXXX: integer;
  iTag,iMonat,iJahr: integer;
  sTemp,sTempTag: string;
Solltest du weiter mit EnodeDate arbeiten,
sind das keine Integer, sondern Word.

Delphi-Quellcode:
  wTag,wMonat,wJahr: Word;


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Seite 1 von 3  1 23      

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