Der Martin: Automatische Nummerierung

Beitrag lesen

Hallo Florian,

Dankeschön erstmal für die schnelle Antwort. Jetzt bekomme ich folgende Fehlermeldungen, schaffe aber nicht sie zu lösen.

ach Mensch, dann wirf doch mal einen Blick ins Manual!

Warning: Wrong parameter count for fread() in C:\www\FF Burgthann\index 3.php on line 5

Im Manual steht doch, dass fread() zwei Parameter braucht, nämlich ein Dateihandle und eine Längenangabe. Ja, der Beispielcode von fastix ist hier leider fehlerhaft, wahrscheinlich hat er das auch nur schnell aus dem Kopf hingeschrieben und vergessen, dass man eine Datei erst öffnen muss, bevor man aus ihr lesen kann.

Warning: Invalid argument supplied for foreach() in C:\www\FF Burgthann\index 3.php on line 8

Das ist dann ein Folgefehler. Aber aus dieser Konstellation erkenne ich, dass fastix nicht, wie ich erst vermutet habe, das Öffnen der Datei vergessen hat, sondern eigentlich file() anstatt fread() gemeint hat. Denn file() gibt tatsächlich ein Array zurück, das für jede Zeile der Datei einen String enthält. Und genau das -ein Array- erwartet ja auch die foreach-Anweisung.

Sowie sollen ja noch folgende Sacheneingebaut werden.

  1. Es sollen nur bestimmte Werte pro Zeile gelesen werden.
  2. Manche Werte bestehen aus Zahlen (3.28, 2.11,...) welche ersetzt werden sollen.

Wie ist denn der Dateiinhalt aufgebaut? Sind die einzelnen Felder eindeutig getrennt? Dein nachfolgender Code sieht zumindest danach aus, da du an den Kommas auftrennst. Dann würdest du eventuell auch mit fgetcsv() anstatt file() weiterkommen. Andernfalls wirst du dich mit den Stringfunktionen beschäftigen müssen, um die einzelnen Felder innerhalb der Zeile aufzudröseln.

Übrigens irritiert mich dein Ansatz, hier -zig if-Zweige ineinander zu verschachteln - ich bin es sonst gewöhnt, solche Folgen sequentiell zu schreiben:

if (Bedingung1)
   { Anweisung1;
   }
  else if (Bedingung2)
   { Anweisung2;
   }
  else if (Bedingung3)
   { Anweisung3;
   }
  else if (Bedingung4)
   { Anweisung4;
   }

Noch eleganter könnte man solche Konstrukte mit einer switch-Anweisung lösen, oder sogar mit einem Array, dessen Schlüssel (key) die Werte enthält, auf die du jetzt vergleichst, und die zugehörigen Werte die Strings, in die du umwandeln möchtest. Also etwa so:

$einsatz = array
  ( "03.01" => "Verkehrsunfall",
    "03.28" => "First Responder",
    ...
    "11.99" => "Unbekannter Brand");

Und dann hast du eine bequeme Übersetzung in der Form
 $einsatzart = $einsatz[$element[36]]
Okay, die Anführungszeichen solltest du vorher aus $element[36] entfernen.

So long,
 Martin

--
TEAM: Toll, Ein Anderer Macht's.