Peter: array limt?

Hallo *,

Vielleicht kann mir jemand von Euch eine technische Frage beantworten (die ich nicht im Archiv gefunden habe):

Ich mache folgendes:
Eine ASCI-Datei etwa 222000 bytes groß mit 3395 Zeilen. Es handelt sich um einen redaktionell bearbeiteten Index mit Schlagworten. Jede Zeile entspricht einem Schlagwort. Bei einem Treffer wird diese Zeile ausgegeben und so bearbeitet und die redaktionennen Kommentare gelöscht. Die sollen nur für ein verbessertes Suchergebnis sorgen. Jedenfalls befinden sich beim Auslesen der Datei in das Array nur 3392 Zeilen. Alle Einträge (Zeilen) danach sind nicht im Array zu finden.

Hier mein Vorghen:

// Datei auslesen und zeilenweise in ein Array schreiben:
$file = "/directory/s0001000.txt";
$content = fopen($file, 'r');
$read = fread($content, filesize($file));
$array = explode("\n", $read);
$array = array_unique($array);

//Treffer nach $query suchen und ausgeben
for ($x=0;$x<count($array);$x=$x+1)
{
  // hier stehen meine Filter zur Bereinigung der Kommentare
  if ($var = stristr($array[$x],$query))
  {
    echo $string . "\n";
  }
}

Kann es sein, dass ich die "Grenze" eines Arrays erreicht habe? Wenn das so ist, welches Workaround gibt es, um eine zeilenweise Dateisuche und anschließend zeilenweise Ausgabe zu ermöglichen?

Danke schon mal für alle Antworten.

Gruß Peter

  1. Moin,

    Kann es sein, dass ich die "Grenze" eines Arrays erreicht habe?

    Kann es vielleicht eher sein dass die 3 'fehlenden' Zeilen einfach Duplikate waren und vom array_unique entsorgt wurden? An eine Grenze bist du jedenfalls nicht gestoßen, und wenn du gegen das Speicherlimit gerannt wärst (was bei rund 500 kB die du offenbar verbrauchst eher unwahrscheinlich ist) dann hättest du eine dicke Warnung gekriegt. Im Übrigen kannst du deine ersten 4 Zeilen mit http://php.net/file zu einer zusammenfassen.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. Hi*,

      Kann es vielleicht eher sein dass die 3 'fehlenden' Zeilen einfach Duplikate waren und vom array_unique entsorgt wurden?

      Die verschluckten letzten 3 Zeilen werden dann gefunden, wenn ich sie an den Anfang der Datei lege. Dann fehlen aber die aktuellen letzten 3 Zeilen.

      Gruß Peter :-)

      1. Hi*,

        ...da fällt mir ein: Vielleicht gibt es eine Begrenzung für den Cashe von Array etc. die ich konfigurieren kann? In der php.ini habe ich solche 'coolen' Features allerdings nicht gefunden.

        Gruß Peter :-)

  2. Hallo Peter,

    Mit »» $array = array_unique($array);

    entfernst du alle doppelten Einträge. Evt. sind deshalb weniger Zeilen im array? siehe http://de.php.net/manual/de/function.array-unique.php

    Mfg Jan

  3. Hi,

    for ($x=0;$x<count($array);$x=$x+1)

    $x=$x+1 geht viel kürzer: $x++
    Und deine For-Schleife zählt jetzt bei jedem(!) Durchlauf die Anzahl der Elemente, das ist nicht gerade Zeitschonend. Mach das 1 mal und speicher das Ergebnis in einer Variablen:

    $cnt = count( $array);
    for( $x = 0; $x < cnt; $x++)
    {
    ...
    }

    Und da du durch alle Elemente durchgehst, kannst du auch foreach benutzen!

    foreach( $array as $element)
    {
       if( $var = stristr( $element, $query))
       {
         echo $string . "\n";
       }
    }

    Thats all Folks
     eb4

    --
    Rettet die Wälder
    Esst Biber und Spechte!
    1. Re: Hi,

      if( $var = stristr( $element, $query))
         {
           echo $string . "\n";
         }

      kann es sein, dass hier $var durch $string ausgetauscht werden müsste *dummfrag*

      Thats all Folks
       eb4

      --
      Rettet die Wälder
      Esst Biber und Spechte!
      1. Hallo eb4,

        Danke für die Tipps.

        $var durch $string ausgetauscht

        Da hast Du recht, das wird auch beim 'Ausschneiden' der Kommentare gemacht.

        Gruß Peter :-)