Stahl Florian: Automatische Nummerierung

Hallo Tom,

mein letzter Thread, ist in das Archiv gerutscht, hatte aber noch auf eine Antwort gehoft. Hier nochmal der Thread.

http://forum.de.selfhtml.org/archiv/2007/12/t164086/#m1068953

Dankeschön!

Mit freundlichen Grüssen
------------------------
Stahl Florian
------------------------

--
Das Leben ist hart, aber wir sind härter
  1. Moin!

      
    #Du  nimmst einen Zähler:  
    $intCounter=0;  
      
    #Du liest die Textdatei zeilenweise in ein Array:  
    $arDateiInhalt=fread('Pfad/Datei');  
      
    # Für jede Zeile:  
    foreach ($arDateiInhalt as  $strZeile) {  
    # counter erhöhen:  
       $intCounter ++;  
       # Zeile mit Nummer ausgeben:  
       print "$intCounter: $strZeile <br>\n";  
    }  
    print "Fertig, Chef!";  
    
    

    Wo liegt das Problem?

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Hallo fastix®,

      Wo liegt das Problem?

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

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

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

      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.

      Ohne automatische Nummerierung habe ich es schon geschafft, nur weis ich nicht, wie ich es in diesen Code integrieren kann.

      Hier mal mein Anfang:

      <?php
      $eintrag=file('200712.txt');
      $ausgabe="<br>";
      $temp=count($eintrag)-1;
      for($i=$temp;$i>=0;$i--)

      {$element=explode(',',$eintrag[$i]);

      if($element[36] == ""03.01."") {$einsatzart =  "Verkehrsunfall";}
      else {if($element[36] == ""03.28."") {$einsatzart =  "First Responder";}
      else{if($element[36] == ""03.02."") {$einsatzart =  "Unfall mit Schienenfahrzeugen";}
      else{if($element[36] == ""03.03."") {$einsatzart =  "Unfall mit Luftfahrzeugen";}
      else{if($element[36] == ""03.04."") {$einsatzart =  "Unfall mit Wasserfahrzeugen";}
      else{if($element[36] == ""03.05."") {$einsatzart =  "Absturzgef&auml;hrdete Person";}
      else{if($element[36] == ""03.06."") {$einsatzart =  "Hochbauunfall/Einsturzgefahr";}
      else{if($element[36] == ""03.07."") {$einsatzart =  "Absturzgef&auml;hrdete Teile";}
      else{if($element[36] == ""03.08."") {$einsatzart =  "Tiefbau-/Silounfall";}
      else{if($element[36] == ""03.09."") {$einsatzart =  "Unfall m. Aufz&uuml;gen/Maschinen/techn. Ger&auml;ten";}
      else{if($element[36] == ""03.10."") {$einsatzart =  "Wasser-/Eisunfall";}
      else{if($element[36] == ""03.11."") {$einsatzart =  "Wassersch&auml;den/Wasserrohrbruch";}
      else{if($element[36] == ""03.12."") {$einsatzart =  "Hochwasser";}
      else{if($element[36] == ""03.13."") {$einsatzart =  "Sturmsch&auml;den";}
      else{if($element[36] == ""03.14."") {$einsatzart =  "Tierunfall";}
      else{if($element[36] == ""03.15."") {$einsatzart =  "Insekten";}
      else{if($element[36] == ""03.16."") {$einsatzart =  "Auslaufender Treibstoff";}
      else{if($element[36] == ""03.17."") {$einsatzart =  "&Ouml;lspur";}
      else{if($element[36] == ""03.18."") {$einsatzart =  "&Ouml;l auf Gew&auml;sser";}
      else{if($element[36] == ""03.19."") {$einsatzart =  "Freiwerden gef&auml;hrlicher Stoffe";}
      else{if($element[36] == ""03.20."") {$einsatzart =  "Vermisste Person";}
      else{if($element[36] == ""03.21."") {$einsatzart =  "Raum-/Wohnungs&ouml;ffnung";}
      else{if($element[36] == ""03.22."") {$einsatzart =  "Verschliesen v. Raum/Wohnung";}
      else{if($element[36] == ""03.23."") {$einsatzart =  "Wasserversorgung-/Transport";}
      else{if($element[36] == ""03.24."") {$einsatzart =  "Freiwillige T&auml;tigkeit";}
      else{if($element[36] == ""03.25."") {$einsatzart =  "Sonstige Hilfeleistung";}
      else{if($element[36] == ""03.26."") {$einsatzart =  "Einsatz nicht mehr erforderlich";}
      else{if($element[36] == ""03.27."") {$einsatzart =  "Besetzen der NaSt bzw. Kreiseinsatzzentrale (KEZ)";}
      else{if($element[36] == ""11.01."") {$einsatzart =  "Wohnungsbrand";}
      else{if($element[36] == ""11.02."") {$einsatzart =  "Verwaltungs-/Bürobrand";}
      else{if($element[36] == ""11.03."") {$einsatzart =  "Gesch&auml;fts-/Warenhausbrand";}
      else{if($element[36] == ""11.04."") {$einsatzart =  "Handwerks-/Kleingewerbebetriebsbrand";}
      else{if($element[36] == ""11.05."") {$einsatzart =  "Hotel-/Gastst&auml;ttenbrand";}
      else{if($element[36] == ""11.06."") {$einsatzart =  "???";}
      else{if($element[36] == ""11.07."") {$einsatzart =  "???";}
      else{if($element[36] == ""11.08."") {$einsatzart =  "Garagenbrand";}
      else{if($element[36] == ""11.09."") {$einsatzart =  "Baustellen-/Rohbaubrand";}
      else{if($element[36] == ""11.10."") {$einsatzart =  "Land-/Forstwirtschaftlicher Brand";}
      else{if($element[36] == ""11.11."") {$einsatzart =  "???";}
      else{if($element[36] == ""11.12."") {$einsatzart =  "Fahrzeugbrand";}
      else{if($element[36] == ""11.13."") {$einsatzart =  "???";}
      else{if($element[36] == ""11.14."") {$einsatzart =  "Lager-/Speditionsbrand";}
      else{if($element[36] == ""11.15."") {$einsatzart =  "Industrie-/Energieversorgungsbrand";}
      else{if($element[36] == ""11.16."") {$einsatzart =  "Fl&auml;chenbrand";}
      else{if($element[36] == ""11.17."") {$einsatzart =  "Sonstiger Brandeinsatz";}
      else{if($element[36] == ""11.99."") {$einsatzart =  "Unbekannter Brand";}
      else{$einsatzart =  "UNBEKANNT";};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};}

      $element[2]=str_replace('"','',$element[2]);
      $element[2]=trim($element[2]);

      $element[3]=str_replace('"','',$element[3]);
      $element[3]=trim($element[3]);

      $element[8]=str_replace('"','',$element[8]);
      $element[8]=trim($element[8]);

      $element[1]=str_replace('"','',$element[1]);
      $element[1]=trim($element[1]);

      $element[36]=str_replace('"','',$element[36]);

      $ausgabe.="<tr class="dienste">";
       $ausgabe.="<td class="dienste"></td>";
       $ausgabe.="<td class="dienste">".$element[2]."</td>";
       $ausgabe.="<td class="dienste">".$element[3]."</td>";
       $ausgabe.="<td class="dienste">".$element[8]."</td>";
       $ausgabe.="<td class="dienste">".$element[1]."</td>";
       $ausgabe.="<td class="dienste">".$einsatzart."</td>";
      $ausgabe.="</tr>";}

      ?>

      Dankeschön für deine BEmühungen!

      Mit freundlichen Grüssen
      ------------------------
      Stahl Florian
      ------------------------

      --
      Das Leben ist hart, aber wir sind härter
      1. Hi,

        Jetzt bekomme ich folgende Fehlermeldungen, schaffe aber nicht sie zu lösen.

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

        *seufz* - das sollte man doch wohl selbst mit rudimentaeren Englischkenntnissen deuten koennen:
        Falsche Anzahl Parameter beim Aufruf der Funktion fread.

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

        Du uebergibst foreach irgendetwas, was kein Array ist. Ggf. Folgefehler von ersterem.

        if($element[36] == ""03.01."") {$einsatzart =  "Verkehrsunfall";}
        else {if($element[36] == ""03.28."") {$einsatzart =  "First Responder";}
        else{if($element[36] == ""03.02."") {$einsatzart =  "Unfall mit Schienenfahrzeugen";}
        else{if($element[36] == ""03.03."") {$einsatzart =  "Unfall mit Luftfahrzeugen";}
        [weitere hundert Zeilen else if ...]
        else{if($element[36] == ""11.99."") {$einsatzart =  "Unbekannter Brand";}
        else{$einsatzart =  "UNBEKANNT";};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};};}

        Himmel, so ein Nonsense kann doch nicht dein Ernst sein ... noch nie von switch gehoert?

        Und selbst switch waere hier noch schlecht eingesetzt - ein Array mit den Zahlwerten als Keys und der Einsatzart als Wert waere hier wohl am besten.
        Dann schaut man mittels in_array, ob's zum Zahlwert einen Eintrag gibt - wenn ja, nimmt man den, wenn nicht, dann halt einen Defaultwert.

        MfG ChrisB

      2. 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.
    2. Moin!

      Ja, Martin hat mit: "Ja, der Beispielcode von fastix ist hier leider fehlerhaft, wahrscheinlich hat er das auch nur schnell aus dem Kopf hingeschrieben und vergessen," recht. Das mit dem aus dem Kopf gilt hier auch, der Code ist ungetestet, aber wir leisten hier Hilfe zur Selbsthilfe, insoweit schließe ich mich Martins Hinweis auf das Manual an.

        
      # Du  nimmst einen Zähler:  
      $intCounter=0;  
        
      # Du baust, der Übersicht halber, eine Funktion  
      function MeinTabellenZeilenGenerator($intCounter, $strZeile, $strTrenner) {  
           $strTabellenZeile   = "<tr>\n<th>$intCounter:<th>";  
           $arZellen = split($strTrenner,$strZeile);  
           foreach ($arZellen as strZelle) {  
               $strTabellenZeile .= "<td>$strZelle</td>\n";  
           }  
           $strTabellenZeile .=  "</tr>\n";  
           return $strTabellenZeile;  
      }  
        
        
        
      # Du liest die Textdatei zeilenweise in ein Array:  
        
      # Änderungen  
      $filename = "/deinPfad/deineDatei";  
      $handle = fopen($filename, "r");  
      $arDateiInhalt = fread($handle, filesize($filename));  
      fclose($handle);  
        
        
      # Du beginnst mit der Generierung der Tabelle:  
      $strTabelle = "<table>\n";  
        
      # Für jede Zeile:  
      foreach ($arDateiInhalt as  $strZeile) {  
          # counter erhöhen:  
          $intCounter ++;  
          # selbst gebaute Funktion aufrufen  
          $strTabelle .= MeinTabellenZeilenGenerator($intCounter, $strZeile, ',');  
      }  
      # Du beendest die Generierung der Tabelle:  
      $strTabelle =  "</table>\n";  
        
        
      # Speicher für weitere Arbeit freigeben...  
      unset ($arDateiInhalt);  
        
      print $strTabelle;  
      print "Fertig, Chef!";  
      
      

      Ansonsten hast Du einen Hinweis auf fgetcsv bekommen. Lies die Dokumentation.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  2. Hallo,

    poste doch mal bitte 5 Zeilen so einer Textdatei, damit wir was konkretes vor Augen haben.
    Und zu der "fortlaufenden" Nummer eine Frage:
        Muss die "unique" zu anderen Textdateien sein?

    Das waere dann eine spezielle Herausforderung, wobei ich nicht verstehe,
    warum Du die Daten nicht in eine MySQL-Tabelle schreibst, damit
    waere dieses Problem naemlich sehr easy zu loesen.

    Gruss und Dank
    Norbert

    1. Hallo an alle,

      hab das Problem, dass ich mich mit MySQL usw. noch nicht beschäftigt habe.

      Den genauen Inhalt der Textdatei kann ich nicht Posten, da diese DAten auch von einem anderen Programm genutzt werden und diese vertraulich sind.

      Ich kann hier die Struktur posten:

      "Wert1","Wert2","Wert3", ...
      "Wert1","Wert2","Wert3", ...

      Gelesen wird nur aus einer Textdatei. In dieser werden aber durch ein anderes Programm keine fortlaufenden Nummern geschrieben. Diese möchte ich aber auf der Homepage stehen haben.

      Danke schon mal.

      Mit freundlichen Grüssen
      ------------------------
      Stahl Florian
      ------------------------

      --
      Das Leben ist hart, aber wir sind härter
      1. Hallo,

        Ich kann hier die Struktur posten:

        okay,
        sieht nach csv-Format aus, da nehme ich mal:
        "Anton","Bucher","Augasse 3","47113","Almen","02682","357159"
        "Bernd","Kreisch","Bergpfad 7","49715","Biesen","02683","456852"
        "Carlos","Santana","Carlsweg 5","41917","Cargen","02684","951753"
        "Dieter","Mayer","Dörrhof 9","45719","Dassel","02685","258654"
        und diesen Code:

        <?php  
        /* Textdatei zeilenweise in ein Array einlesen */  
        $DT = file('datei.txt');  
        /* Array zeilenweise abarbeiten */  
        $i = 0;  
        foreach($DT as $zeile) {  
            $i++; /* Zeilenzaehler */  
            $zeile = trim('"'.$i.'",'.$zeile); /* Nr. einfuegen und Zeilenumbruch entfernen */  
            $iX = strlen($zeile);  /* Zeilenlaenge bestimmen */  
            $AA = explode('","', substr($zeile, 1, $iX-2)); /* Zeile in Daten zerlegen */  
            print_r($AA); /* Test-Ausgabe */  
        }  
        ?>
        

        Schau Dir die Ausgabe an, dann verstehst Du das sicher.

        Noch etwas zu der unuebersichtlichen Auswertung von Element[36].
        Diese Loesung ist sehr schlecht zu warten, deshalb hier mein Vorschlag:
        Lagere die Daten in eine extra Datei aus, die includiert wird.
        Datei Einsatzart.php:

        <?php  
        $einsatzart = array(  
        '03.01.'=>'Verkehrsunfall',  
        '03.28.'=>'First Responder',  
        '03.02.'=>'Unfall mit Schienenfahrzeugen',  
        '03.03.'=>'Unfall mit Luftfahrzeugen',  
        '03.04.'=>'Unfall mit Wasserfahrzeugen',  
        '03.05.'=>'Absturzgefährdete Person',  
        '03.06.'=>'Hochbauunfall/Einsturzgefahr',  
        '03.07.'=>'Absturzgefährdete Teile',  
        '03.08.'=>'Tiefbau-/Silounfall',  
        '03.09.'=>'Unfall m. Aufz&uuml;gen/Maschinen/techn. Geräten',  
        '03.10.'=>'Wasser-/Eisunfall',  
        '03.11.'=>'Wasserschäden/Wasserrohrbruch',  
        '03.12.'=>'Hochwasser',  
        '03.13.'=>'Sturmschäden',  
        '03.14.'=>'Tierunfall',  
        '03.15.'=>'Insekten',  
        '03.16.'=>'Auslaufender Treibstoff',  
        '03.17.'=>'Ölspur',  
        '03.18.'=>'Öl auf Gewässer',  
        '03.19.'=>'Freiwerden gefährlicher Stoffe',  
        '03.20.'=>'Vermisste Person',  
        '03.21.'=>'Raum-/Wohnungsöffnung',  
        '03.22.'=>'Verschliesen v. Raum/Wohnung',  
        '03.23.'=>'Wasserversorgung-/Transport',  
        '03.24.'=>'Freiwillige Tätigkeit',  
        '03.25.'=>'Sonstige Hilfeleistung',  
        '03.26.'=>'Einsatz nicht mehr erforderlich',  
        '03.27.'=>'Besetzen der NaSt bzw. Kreiseinsatzzentrale (KEZ)',  
        '11.01.'=>'Wohnungsbrand',  
        '11.02.'=>'Verwaltungs-/Bürobrand',  
        '11.03.'=>'Geschäfts-/Warenhausbrand',  
        '11.04.'=>'Handwerks-/Kleingewerbebetriebsbrand',  
        '11.05.'=>'Hotel-/Gaststättenbrand',  
        '11.06.'=>'???',  
        '11.07.'=>'???',  
        '11.08.'=>'Garagenbrand',  
        '11.09.'=>'Baustellen-/Rohbaubrand',  
        '11.10.'=>'Land-/Forstwirtschaftlicher Brand',  
        '11.11.'=>'???',  
        '11.12.'=>'Fahrzeugbrand',  
        '11.13.'=>'???',  
        '11.14.'=>'Lager-/Speditionsbrand',  
        '11.15.'=>'Industrie-/Energieversorgungsbrand',  
        '11.16.'=>'Flächenbrand',  
        '11.17.'=>'Sonstiger Brandeinsatz',  
        '11.99.'=>'Unbekannter Brand');  
        ?>
        

        So kannst Du die Daten problemlos pflegen.
        Entities werden erzeugt und gehoeren hier nicht rein.
        Nun kann man jede Einsatzart direkt ausgeben.
        HTH

        Gruss und Dank
        Norbert

        1. Moin!

          Hallo,

          Ich kann hier die Struktur posten:
          okay,
          sieht nach csv-Format aus, da nehme ich mal:

          <?php

          /* Textdatei zeilenweise in ein Array einlesen /
          $DT = file('datei.txt');
          /
          Array zeilenweise abarbeiten /
          $i = 0;
          foreach($DT as $zeile) {
              $i++; /
          Zeilenzaehler /
              $zeile = trim('"'.$i.'",'.$zeile); /
          Nr. einfuegen und Zeilenumbruch entfernen /
              $iX = strlen($zeile);  /
          Zeilenlaenge bestimmen /
              $AA = explode('","', substr($zeile, 1, $iX-2)); /
          Zeile in Daten zerlegen /
              print_r($AA); /
          Test-Ausgabe */
          }
          ?>

            
            
          Das geht besser:  
            
          ~~~php
          <?php  
          $datei='pfad/zur/datei';  
          if (! is_readable($datei) { die("Fatal: Die Datei $datei nicht vorhanden oder nicht lesbar."); }  
          $handle=fopen($datei, 'r') or die("Fatal: Die Datei $datei konnte nicht geöffnet werden. (lock?)");  
          $ar=array();  
          while (  
               # array fgetcsv  ( resource $handle  , int $length  [, string $delimiter  [, string $enclosure  ]] )  
               $ar[] = fgetcsv ( $handle , filesize($datei, ',', '"');  
          }  
            
          print_r ($ar);  
          ?>
          

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
          1. Hallo fastix®,

            Das geht besser:

            na-ja,
            wenn Du die Parse- und logischen Errors aus dem Code entfernt haettest,
            waere er zumindestens erst mal lauffaehig ... :-(

            Den Beweis, dass dieser Konstrukt besser(schneller) als file() ist,
            steht dann aber immer noch aus ...

            Rein IMHO ist es ganz schoen fies, einem Anfaenger ungetesteten Code
            unterzuschieben, das zeugt von wenig Professionalitaet ...

            Gruss und Dank
            Norbert

            1. Moin!

              Den Beweis, dass dieser Konstrukt besser(schneller) als file() ist,
              steht dann aber immer noch aus ...

              Wieso? fgetcsv() ist eine PHP-eigene Funktion. Diese liegt also bereits in binärer Form vor. Dem nach wird anders als bei einem Konstrukt, bei welchem Du das CSV selbst mittels vieler in einer erst noch zu interpretierenden Sprache geschriebenen Einzelschritte zerlegst, der Interpreter weniger gefordert. Es ist also zumindest sehr wahrscheinlich, dass ein solcher Code deutlich schneller ist. Wer mag kann ja testen...

              Du bist ein wenig empfindlich: Wenn jemand Hinweis auf besseren/schnelleren Code gibt, dann macht er das nicht um Dich herabzuwürdigen.

              Rein IMHO ist es ganz schoen fies, einem Anfaenger ungetesteten Code
              unterzuschieben, das zeugt von wenig Professionalitaet ...

              Hier gibt es Hilfe zur Selbsthilfe und keine "mundfertigen" Skripte. Er fragt hier, will also lernen. Absicht sind die Fehler nun gerade nicht, aber hier ist eben nicht das "GetPHP"- oder "Wir schreiben Dein Skript"- Forum, sondern das SelfHTML-Forum.

              Bei "irre komplizierten" Sachen teste ich den Code trotzdem - schon weil es mich selbst interessiert.

              Hier für Dich der getestete Code:

              <?php  
              $datei='./test.txt';  
              if (! is_readable($datei)) { die("Fatal: Die Datei $datei nicht vorhanden oder nicht lesbar."); }  
              $handle=fopen($datei, 'r') or die("Fatal: Die Datei $datei konnte nicht geöffnet werden. (lock?)");  
              $ar=array();  
              while ($ar[] = fgetcsv ( $handle , filesize($datei), ',', '"')) {}  
              print_r ($ar);  
              ?>
              

              oder hier die "Superverbesserung":

              <?php  
              #Einstellungen  
              $datei='./test.txt';  
              $delim=',';  
              $quot='"';  
                
              # Funktionen  
              function InTag($str, $tag, $extra='') {  
                return '<'.trim($tag.' '.$extra).'>'.$str.'</'.$tag.">\n";  
              }  
                
              # Run!  
              $iCounter=0;  
              $strTabelle='';  
                
              if (! is_readable($datei)) { die("Fatal: Die Datei '$datei' ist nicht vorhanden oder nicht lesbar. (Rechte gesetzt?)"); }  
              $handle=fopen($datei, 'r') or die("Fatal: Die Datei '$datei' konnte nicht geöffnet werden. (lock?)");  
                
              while ($ar = fgetcsv ( $handle , filesize($datei), $delim, $quot )) {  
                 if (isset($ar[1])) { # Zur Vermeidung leerer letzter Zeile in der CSV-Datei  
                   $strZeile=InTag(++$iCounter, 'th', 'class="tr_' . $iCounter % 2 . '"');  
                   foreach ($ar as $strZelle) {  
                      $strZeile .= InTag(htmlentities($strZelle), 'td');  
                   }  
                   $strTabelle.=InTag($strZeile, 'tr');  
                 }  
              }  
              print  InTag($strTabelle, 'table', 'border="0"');  
              ?>
              

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
              1. Hallo fastix®,

                Den Beweis, dass dieser Konstrukt besser(schneller) als file() ist,
                steht dann aber immer noch aus ...
                Wieso?

                weil Du Sachen behauptest ohne sie ueberprueft zu haben!

                Ich habe es, und dabei ist mein Code um 25% fixer und hat auch das
                eigentliche Problem des OP erledigt, welches Du schlicht ignoriert hast.

                Du bist ein wenig empfindlich:

                manchmal ja ...

                Rein IMHO ist es ganz schoen fies, einem Anfaenger ungetesteten Code
                unterzuschieben, das zeugt von wenig Professionalitaet ...
                Hier gibt es Hilfe zur Selbsthilfe und keine "mundfertigen" Skripte.

                *g* als munfertig wuerde ich meinen Vorschlag nicht bezeichnen,
                wohl aber als lauffaehig ... ;-)

                Gruss und Dank
                Norbert

                1. Moin!

                  *g* als munfertig wuerde ich meinen Vorschlag nicht bezeichnen,
                  wohl aber als lauffaehig ... ;-)

                  So lange in der CSV-Datei immer die Werte mit einem Quota eingeschlossen sind und dazwischen keine Leerzeichen stehen:

                  "Otto","12.1.2007"
                  "Paul", "13.1.2007"

                  Das mit der Geschwindigkeit kann man ja messen. Ich hoffe, Du hast beide Versionen mehrfach gestartet um unterschiedliche Ausgangsbedingungen (Dateisystems-Cache, PHP-Funktionscache, Befindlichkeiten der Zend-Engine, Pipe zum Server oder zur Konsole) auszuschließen und auch berücksichtigt, dass eine unterschiedliche Anzahl von Spalten zu unterschiedlichen Ergebnissen führen kann?

                  MFFG (Mit freundlich- friedfertigem Grinsen)

                  fastix®

                  --
                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                  1. Hallo,

                    Das mit der Geschwindigkeit kann man ja messen.

                    riiichtig

                    Ich hoffe, ... f.f.

                    Du hoffst voellig zu recht, mir liegt nur was an der wahren Ausfuehrungszeit.
                    Die Datei hat 9 Felder und 20.000 Zeilen, genug um richtig in Schwung zu kommen.
                    Und die Zeiten sind marginal, 590-598 ms sowie 924-933 ms. Merkt kein Laie ...

                    Formatfehler kann man bei Dateien, die von Programmen erstellt wurden
                    eigentlich per se ausschliessen oder sollte dies koennen.

                    Gruss und Dank
                    Norbert

              2. Hallo an fastix,

                oder hier die "Superverbesserung":

                <?php

                #Einstellungen
                $datei='./test.txt';
                $delim=',';
                $quot='"';

                Funktionen

                function InTag($str, $tag, $extra='') {
                  return '<'.trim($tag.' '.$extra).'>'.$str.'</'.$tag.">\n";
                }

                Run!

                $iCounter=0;
                $strTabelle='';

                if (! is_readable($datei)) { die("Fatal: Die Datei '$datei' ist nicht vorhanden oder nicht lesbar. (Rechte gesetzt?)"); }
                $handle=fopen($datei, 'r') or die("Fatal: Die Datei '$datei' konnte nicht geöffnet werden. (lock?)");

                while ($ar = fgetcsv ( $handle , filesize($datei), $delim, $quot )) {
                   if (isset($ar[1])) { # Zur Vermeidung leerer letzter Zeile in der CSV-Datei
                     $strZeile=InTag(++$iCounter, 'th', 'class="tr_' . $iCounter % 2 . '"');
                     foreach ($ar as $strZelle) {
                        $strZeile .= InTag(htmlentities($strZelle), 'td');
                     }
                     $strTabelle.=InTag($strZeile, 'tr');
                   }
                }
                print  InTag($strTabelle, 'table', 'border="0"');
                ?>

                  
                Dankeschön für deine Hilfe. Soweit funktioniert alles, nur komm ich immer noch nicht darauf, wie ich nur bestimmte Werte pro Zeile auslesen kann?  
                  
                  
                Mit freundlichen Grüssen  
                \------------------------  
                Stahl Florian  
                \------------------------
                
                -- 
                Das Leben ist hart, aber wir sind härter
                
                1. Moin!

                  Hallo an fastix,

                  oder hier die "Superverbesserung":

                  <?php

                  #Einstellungen
                  $datei='./test.txt';
                  $delim=',';
                  $quot='"';

                  Funktionen

                  function InTag($str, $tag, $extra='') {
                    return '<'.trim($tag.' '.$extra).'>'.$str.'</'.$tag.">\n";
                  }

                  Run!

                  $iCounter=0;
                  $strTabelle='';

                  if (! is_readable($datei)) { die("Fatal: Die Datei '$datei' ist nicht vorhanden oder nicht lesbar. (Rechte gesetzt?)"); }
                  $handle=fopen($datei, 'r') or die("Fatal: Die Datei '$datei' konnte nicht geöffnet werden. (lock?)");

                  while ($ar = fgetcsv ( $handle , filesize($datei), $delim, $quot )) {
                     if (isset($ar[1])) { # Zur Vermeidung leerer letzter Zeile in der CSV-Datei
                       $strZeile=InTag(++$iCounter, 'th', 'class="tr_' . $iCounter % 2 . '"');
                       foreach ($ar as $strZelle) {
                          $strZeile .= InTag(htmlentities($strZelle), 'td');
                       }
                       $strTabelle.=InTag($strZeile, 'tr');
                     }
                  }
                  print  InTag($strTabelle, 'table', 'border="0"');
                  ?>

                  
                  >   
                  > Dankeschön für deine Hilfe. Soweit funktioniert alles, nur komm ich immer noch nicht darauf, wie ich nur bestimmte Werte pro Zeile auslesen kann?  
                    
                    
                  ~~~php
                    
                    
                  ...  
                  while ($ar = fgetcsv ( $handle , filesize($datei), $delim, $quot )) {  
                      if (isset($ar[1])) { # Zur Vermeidung leerer letzter Zeile in der CSV-Datei  
                        $strZeile=InTag(++$iCounter, 'th', 'class="tr_' . $iCounter % 2 . '"');  
                    
                        $auswahl=array($ar[0], $ar[3], $ar[2]); # So einfach ist das....  
                    
                        foreach ($auswahl as $strZelle) {       # Änderung beachten!  
                           $strZeile .= InTag(htmlentities($strZelle), 'td');  
                        }  
                        $strTabelle.=InTag($strZeile, 'tr');  
                  print  InTag($strTabelle, 'table', 'border="0"');  
                  
                  

                  Bitteschön!

                  fastix®

                  --
                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                  1. Hallo fastix,

                    und nochmal dankeschön. Hatte erst nicht funktioniert, da noch 2 Klammern am Ende gefehlt hatten. Funktioniert jetzt aber bedingt.

                    $auswahl=array($ar[2], $ar[3], $ar[8], $ar[1], $ar[36]); # Element die ausgewählt werden sollen

                    So sieht die Auswahlzeile jetzt bei mir aus. Die ersten 4 $ar[] werden angezeigt. Aber das $ar[36] wird leider nicht angezeigt.

                    Mit freundlichen Grüssen
                    ------------------------
                    Stahl Florian
                    ------------------------

                    --
                    Das Leben ist hart, aber wir sind härter
                    1. Moin!

                      Hallo fastix,

                      und nochmal dankeschön. Hatte erst nicht funktioniert, da noch 2 Klammern am Ende gefehlt hatten. Funktioniert jetzt aber bedingt.

                      $auswahl=array($ar[2], $ar[3], $ar[8], $ar[1], $ar[36]); # Element die ausgewählt werden sollen

                      So sieht die Auswahlzeile jetzt bei mir aus. Die ersten 4 $ar[] werden angezeigt. Aber das $ar[36] wird leider nicht angezeigt.

                      Lasse es Dir $ar mit print_r($ar) und $auswahl mit print_r($auswahl) ausgeben. Möglicherweise bist Du dann klüger.

                      MFFG (Mit freundlich- friedfertigem Grinsen)

                      fastix®

                      --
                      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                      1. Hallo fastix,

                        Lasse es Dir $ar mit print_r($ar) und $auswahl mit print_r($auswahl) ausgeben. Möglicherweise bist Du dann klüger.

                        mit print_r($ar) kommt gar nichts und mit print_r($auswahl) kommt folgende Zeile:

                        Array ( [0] => 29.10.2007 [1] => 18:00 [2] => Ortschaft [3] => Technische Hilfe [4] => )

                        Mit freundlichen Grüssen
                        ------------------------
                        Stahl Florian
                        ------------------------

                        --
                        Das Leben ist hart, aber wir sind härter
                        1. Moin!

                          Hallo fastix,

                          Lasse es Dir $ar mit print_r($ar) und $auswahl mit print_r($auswahl) ausgeben. Möglicherweise bist Du dann klüger.

                          mit print_r($ar) kommt gar nichts und mit print_r($auswahl) kommt folgende Zeile:

                          Array ( [0] => 29.10.2007 [1] => 18:00 [2] => Ortschaft [3] => Technische Hilfe [4] => )

                          Wenn es dir gelingt mit $auswahl=array($ar[0], $ar[1]) oder ähnlichem aus $ar Werte von Elementen zu übernehmen, dann _muss_ da was drin stehen.

                          Mögliche(!) Fehlerquellen:
                          Du lässt Dir den falschen Array ausgeben.
                          Du löschst oder überschreibst diesen.

                          Weitere mögliche Lösung:
                          Möglicherweise solltest Du ein reset($ar); ausführen um den internen Zeiger wieder auf das erste Element zu setzen. Allerdings vermute ich das hier nicht als Fehlerquelle.

                          MFFG (Mit freundlich- friedfertigem Grinsen)

                          fastix®

                          --
                          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                          1. Hallo fastix,

                            Wenn es dir gelingt mit $auswahl=array($ar[0], $ar[1]) oder ähnlichem aus $ar Werte von Elementen zu übernehmen, dann _muss_ da was drin stehen.

                            Habe ich mir auch gedacht, aber es kommt leider nichts. Auch wenn ich print_r($auswahl); mache, fehlt das Element 36.

                            Mögliche(!) Fehlerquellen:
                            Du lässt Dir den falschen Array ausgeben.
                            Du löschst oder überschreibst diesen.

                            Habe es nochmal überprüft:

                            print($ar);          => Zeigt nichts an
                            print_r($auswahl);   => Zeigt die oben genannte Zeile an

                            Die Arrays sind die richtigen, haben also die korrekte Bezeichnung.

                            Mit freundlichen Grüssen
                            ------------------------
                            Stahl Florian
                            ------------------------

                            --
                            Was dich nicht umbringt macht dich nur härter
                            1. Moin!

                              print($ar);          => Zeigt nichts an
                              print_r($auswahl);   => Zeigt die oben genannte Zeile an

                              Das kann nicht sein. Du kannst aus einem leeren array &ar nichts nach $array übernommen haben. Überprüfe Deinen Code.

                              Lasse $ar unmittelbar eine Zeile über der Zeile ausgeben, in der Du $auswahl erzeugst.

                              MFFG (Mit freundlich- friedfertigem Grinsen)

                              fastix®

                              --
                              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                              1. Hallo fastix,

                                Jetzt gibt er folgendes aus:

                                ArrayArrayArrayArrayArrayArrayArrayArrayArray...

                                Mit freundlichen Grüssen
                                ------------------------
                                Stahl Florian
                                ------------------------

                                --
                                Was dich nicht umbringt macht dich nur härter
                                1. Moin!

                                  Hallo fastix,

                                  Jetzt gibt er folgendes aus:

                                  ArrayArrayArrayArrayArrayArrayArrayArrayArray...

                                  Nicht print, print_r sollst Du verwenden.

                                  MFFG (Mit freundlich- friedfertigem Grinsen)

                                  fastix®

                                  --
                                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                                  1. Hallo fastix,

                                    Nicht print, print_r sollst Du verwenden.

                                    Jetzt habe ich auch den (Leichtsinns)-Fehler gefunden:

                                    Falsches Element. Nicht 36 sondern 34.

                                    Jetzt muss ich die Werte nur noch mit einer If-Anweisung durch Wörter ersetzen, und dann denke ich funktioniert alles.

                                    Vielen, Vielen, dank für die tolle Hilfe!!!

                                    Mit freundlichen Grüssen
                                    ------------------------
                                    Stahl Florian
                                    ------------------------

                                    --
                                    Was dich nicht umbringt macht dich nur härter
                                  2. Hallo an alle,

                                    eine Frage habe ich jetzt aber noch. Wie kann ich die Tabelle die hier generiert wird, formatieren?

                                    Mit freundlichen Grüssen
                                    ------------------------
                                    Stahl Florian
                                    ------------------------

                                    --
                                    Was dich nicht umbringt macht dich nur härter