DavidB: Datei einlesen und String suchen

Guten Morgen!

Ich lese eine dxf-Datei(ASCII) ein und möchte nach einem bestimmten String suchen

$zeilen = file ('z1.dxf');  
$key = array_search("LINE", $zeilen);  
echo "KEY= ".$key."<br>";

Das liefert leider kein Ergebnis. Wenn ich das Element direkt anspreche

echo "KEY= ". $zeilen[1567];

bekomme ich die korrekte Ausgabe LINE

Woran liegt es?

Gruß
David

  1. Hallo,

    teste es doch an einem kleine Beispiel erstmal. Bau Dir ein kleines Array oder eine kleine Datei, gibt die eingelesenen Werte erstmal aus, dann lass die Suche laufen. Der Code sieht doch erstmal korrekt aus.

    Gruß

    jobo

    1. Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere

      $zeilen = array("A","B", "C", "LINE", "X");  
      $key = array_search("LINE", $zeilen);  
      echo "KEY= ".$key."<br>";
      

      klappt es. Aber  mit selbstgebastelter kleiner txt mit
      A
      B
      C
      LINE
      X
       geht es wieder nicht. *kopfkratz

      Hallo,

      teste es doch an einem kleine Beispiel erstmal. Bau Dir ein kleines Array oder eine kleine Datei, gibt die eingelesenen Werte erstmal aus, dann lass die Suche laufen. Der Code sieht doch erstmal korrekt aus.

      Gruß

      jobo

      1. Tach auch.

        Zunächst: bitte kein TOFU produzieren. Danke.

        Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere

        $zeilen = array("A","B", "C", "LINE", "X");

        $key = array_search("LINE", $zeilen);
        echo "KEY= ".$key."<br>";

        
        >   
        > klappt es. Aber  mit selbstgebastelter kleiner txt mit  
        > A  
        > B  
        > C  
        > LINE  
        > X  
        >  geht es wieder nicht. \*kopfkratz  
          
        Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).  
          
        Kleine Tipp: nutze var\_dump bzw print\_r, um solche Fehlerquellen zu beseitigen (dann siehst du, dass das Array-Element mehr Zeichen enthält, als du erwartest).  
          
        Bis die Tage,  
        Matti
        
        -- 
        [Webapplikationen in C++ entwickeln](http://tntnet.org/)
        
        1. Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).

          Danke euch beiden, das war es. TOFU kannte ich noch nicht, werde es vielleicht beherzigen ;) Der Hinweis auf http://php.net/manual/de/function.trim.php wäre mir lieber gewesen.

          1. Hello,

            Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).

            Danke euch beiden, das war es. TOFU kannte ich noch nicht, werde es vielleicht beherzigen ;) Der Hinweis auf http://php.net/manual/de/function.trim.php wäre mir lieber gewesen.

            Den Hinweis benötigst Du aber gar nicht, wenn Du dir die (neueren) Möglichkeiten der Funktion file() anschauen würdest

            http://de.php.net/manual/en/function.file.php

            Ein Funktionsargument steuert das Anhängen von EOL-Marken.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
      2. Hallo,

        Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere

        $zeilen = array("A","B", "C", "LINE", "X");

        $key = array_search("LINE", $zeilen);
        echo "KEY= ".$key."<br>";

          
        Schau, dann liegt es am Einlesen des Arrays oder eben, wie Matti sagt, daran, dass der String nicht passt. Hängt da der Absatz wirklich dran? Der ist doch der Zeilentrenner. Vielliecht kriegst Du kein Array eingelesen?  
          
        var\_dump($deinArray); hilft dann eben.  
          
        Gruß  
          
        jobo
        
  2. Hello,

    Ich lese eine dxf-Datei(ASCII) ein und möchte nach einem bestimmten String suchen

    $zeilen = file ('z1.dxf');

    $key = array_search("LINE", $zeilen);
    echo "KEY= ".$key."<br>";

    
    >   
    > Das liefert leider kein Ergebnis. Wenn ich das Element direkt anspreche  
    >   
    > `echo "KEY= ". $zeilen[1567];`{:.language-php}  
    >   
    > bekomme ich die korrekte Ausgabe `LINE`{:.language-sql}  
    >   
    > Woran liegt es?  
      
    an den unsichtbaren Zeichen?  
      
    Array\_search() fürht einen exaxten Vergleich der "Needle" mit den Elementen des "Haystacks" durch. Diese enthalten aber außer dem gesuchten Begriff auch das Zeilenendezeichen.  
      
    ein     $zeilen = file ('z1.dxf', FILE\_IGNORE\_NEW\_LINES);  
      
    würde Dir vermutlich schon weiterhelfen.  
      
    Wenn Du nun aber den Suchstring nur in einem Teil der Zeile suchst, dann könntest Du das Array auch selber iterieren:  
      
        $zeilen = file ('z1.dxf', FILE\_IGNORE\_NEW\_LINES);  
        $found = false;  
      
        if (is\_array($zeilen))  
        {  
            foreach($zeilen as $lineno => $single\_line)  
            {  
                if (false !== ($found = strpos($single\_line, $search)) break;  
            }  
        }  
        else  
        {  
            ## Fehlerbehandlung für file()  
        }  
      
        if ($found !== false)  
        {  
            echo "<p>gesuchter Begriff " .  
                 htmlspecialchars($search) .  
                 " wurde in Zeile <strong>$key</strong> an der Position " .  
                 "<strong>$found</strong> gefunden</p>";  
        }  
        else  
        {  
            "<p>Suchbegriff wurde nicht gefunden</p>";  
        }  
      
      
      
    So oder so ähnlich für die Ein-Byte-Codierung.  
    Bei UTF-8 müsstest Du die entsprechenden mb-Funktionen benutzen.  
      
    <http://de.php.net/manual/en/ref.mbstring.php>  
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>