Nullen werden nicht angezeigt
Jan
- php
Ich habe eine Zahl in einer Datei, von der eine andere Zahl subtrahiert werden soll. Diese Zahl ist aber eine Tausenderzahl mit mehreren Nullen.
Leider werden in der Ausgabe der Datei die Nullen nicht mit ausgegeben.
Also erstmal die php Datei:
<?php
$Minus = 2;
$datei = fopen("geld.php","r+");
$Konto = fgets($datei, 5);
$Konto = $Konto - $Minus;
echo $Konto;
rewind($datei);
fwrite($datei, $Konto);
fclose($datei);
?>
Die "Minus" Variable ist nur für die Testläufe gedacht. Wenn in der Datei "geld.php" die Zahl 20 000 stand, wird 18 ausgegeben anstatt 19 998.
Vielleicht hat ja jemand ne Idee!?
Was gibt er aus wenn du vor der Zeile:
$Konto = $Konto - $Minus;
ein
echo $Konto;
schreibst?
Das war der richtige Tipp mit dem fgets! *Kopf meets wand* Da musste nur ne 6 anstatt ner 5 hin. Und das leerzeichen musste auch raus.
Jetzt läufts. Danke
wenn da wirklich "20 000" steht könnte es an dem leerzeichen liegen
^
oder gegebenenfalls an trennzeichen wie .
wobei . sogar richtig sinn ergäbe, da er dann ja 20.000 hat und das ist ja bekanntlich die ganzzahl 20 :)
mit den php datei operationen bin ich nicht so vertraut, schon überprüft ob er die richtige zahl ausliest?
Hello,
<?php
$Minus = 2;$datei = fopen("geld.php","r+");
$Konto = fgets($datei, 5); ### liest 5 Zeichen inclusive der Zeilenende-Zeichen
$Konto = $Konto - $Minus;
echo $Konto;
rewind($datei);
fwrite($datei, $Konto);
fclose($datei);?>
Ich vermute, dass es an fgets() liegt.
http://de3.php.net/manual/en/function.fgets.php
<cite>Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first). If no length is specified, it will keep reading from the stream until it reaches the end of the line.</cite>
Wenn die Zeile durch ein CRLF abgeschlossen ist, dann bleiben für die Zahl eventuell sogar nur n-2 Zeichen übrig.
Um Zahlen in einer Datei abzuspeichern, sollte man sich auf ein Format festlegen, z.B. immer 16 Zeichen für jede Zahl. Diese werden ja bei PHP, wenn man nichts anderes bestimmt ( siehe http://de3.php.net/manual/en/function.pack.php ) als Strings abgespeichert, also in ihren Ziffernzeichen.
Nimm besser fread() zum auslesen der Datei. Das liest genau soviele Zeichen, wie man vorgibt, wenn sie denn in der Datei enthalten sind. Fülle die Zahl vor dem Wegschreiben auf eine definierte Stringlänge auf
http://de3.php.net/manual/en/function.str-pad.php oder mit einer eigenen Funktion.
Liebe Grüße
Tom vom Berg
Hello,
Quatsch, jetzt habe ich doch 5 geschrieben.
$Konto = fgets($datei, 5); ### liest 4 Zeichen
http://de3.php.net/manual/en/function.fgets.php
Wollte aber "liest vier Zeichen" schreiben...
Liebe Grüße
Tom vom Berg