ingolf: Daten aus File in array sind alles strings! wiso??

Hi,

ich habe gerade an einer Visualisierung von Daten gebastelt (Balkendiagramm). Dazu habe ich mich auf http://ykcee.sourceforge.net gestützt. Die Daten kommen aus einem CSV-File, welches ich in ein array(array(y1,x1,x2,x3..),array(y2,x1,x2,x3..),...) eingelesen habe. Leider funktionierte die Sachen nicht :((

Nach langem Suchen habe ich bemerkt, dass das Einlesen des Files mit fgetcsv oder fgets + explode nur einzelne Strings für die einzelnen "Arraybausteine" erzeugt, auch wenn in der Datei nur Zahlen stehen. z.B.

Mai;12;15;27
Juni;24;34;13
Juli;33;20;10

oder

5;12;15;27
6;24;34;13
7;33;20;10

Kann man ein File in ein Array so einlesen, das die Elemente von Anfang an integer sind?!?

(habe in einer Schleife eine Datentypumwandlung gemacht, hmmm..)

Gruß Ingolf

  1. Hallo ingolf!

    Nach langem Suchen habe ich bemerkt, dass das Einlesen des Files mit fgetcsv oder fgets + explode nur einzelne Strings für die einzelnen "Arraybausteine" erzeugt, auch wenn in der Datei nur Zahlen stehen. z.B.

    [...]

    In der Datei stehen ja auch Strings, deswegen werden sie auch so eingelesen.

    Kann man ein File in ein Array so einlesen, das die Elemente von Anfang an integer sind?!?

    IMHO nein.

    Aber, was ist jetzt dein Problem?

    $a="7";
    $b="4";
    echo $a*$b;

    zeigt doch saubere 28. Die erste Rechenoperation wandelt die Typen um.

    Gruss,
     Carsten

    1. Hi Carsten,

      Nach langem Suchen habe ich bemerkt, dass das Einlesen des Files mit fgetcsv oder fgets + explode nur einzelne Strings für die einzelnen "Arraybausteine" erzeugt, auch wenn in der Datei nur Zahlen stehen. z.B.
      [...]

      In der Datei stehen ja auch Strings, deswegen werden sie auch so eingelesen.

      schon Richtig, aber da die Zahlen in der Datei keine " " haben, bin ich davon ausgegangen, dass PHP dies gleich als (int) Zahl interpretiert

      ich habe mich noch nicht vollständig durch den Quelltext von YKCEE gequält - das "Ding" will auf alle Fälle "richtige" Integer haben

      Kann man ein File in ein Array so einlesen, das die Elemente von Anfang an integer sind?!?

      IMHO nein.

      schade ;-))

      Aber, was ist jetzt dein Problem?

      $a="7";
      $b="4";
      echo $a*$b;

      zeigt doch saubere 28. Die erste Rechenoperation wandelt die Typen um.

      s.o.

      Gruss
      ingolf

      1. Hi,

        ich habe mich noch nicht vollständig durch den Quelltext von YKCEE gequält - das "Ding" will auf alle Fälle "richtige" Integer haben

        Kann ich mir zwar nicht vorstellen, aber Caste (machst du doch in C auch nicht anders ;) die strings doch einfach

        $int = (int) $string;

        MfG Olli

        1. Hi,

          ich habe mich noch nicht vollständig durch den Quelltext von YKCEE gequält - das "Ding" will auf alle Fälle "richtige" Integer haben

          Kann ich mir zwar nicht vorstellen, aber Caste (machst du doch in C auch nicht anders ;) die strings doch einfach

          $int = (int) $string;

          MfG Olli

          nunja, Umwandeln geht schon:

          Auslesen der Daten aus Datei und "Vorbereiten" für YKCEE

          eine CSVDatei-Zeile z.B. Mai;39;29;40;21

          $file = "datei.csv";

          Datei öffnen

          $fp = fopen ($file,'r');

          Datei in array(array())

          while (!feof($fp)) {
           static $i = 0;
           $line = fgets ( $fp, 4096);
           $data_line = explode ( ";" , $line);
           #  für mehrere Elemente pro Zeile
            for ($n = 1; $n <= 3; $n++){

          # UMWANDLUNG hier!!!!!!!!!!!!!!!!!!!!!!!!!
             $data_line[$n] = (int)$data_line[$n];
            }

          # Unter-Array in Haupt-Array einschreiben:
           $data[$i] = $data_line;

          $i++;
          }

          wenn man sich das Array ausgibt und den Datentyp anzeigen lässt (gettype) kommt bei o.g. Beispiel
          string int int int int
          string int int.....

          und so funktioniert es auch, aber gibt es nicht eine elegantere Lösung :o ??

          gruß
          ingolf

  2. Hallo,

    hast du schonmal die Funktion settype() betrachtet? Die sollte die Datentypen umwandeln. Und das sollte sich auch direkt in deine Code integrieren lassen, der die Datei ausliest.

    - Sven Rautenberg