File auslesen, bestimmte Zeilen löschen!

icefire

Erfahrenes Mitglied
Hallo!
Ich lese ein Serverfile aus, um bestimmte Game-Server Einstellungen auf meiner HP auszugeben. Natürlich möchte ich wichtige Zeilen wie z.B. das rcon Passwort o.ä. nicht mit ausgeben, sondern daran hindern. Mit hilfe von einem Cut-array() habe ich dies auch versucht. Aber entweder wird nichts ausgegeben, oder wie im Moment nur jeder 2te Buchstabe aus jeder Zeile. In welche Richtung denk ich denn da falsch? :confused:

Code:
PHP:
$file = "listenserver.cfg";

if (file_exists($file)){

$cutinfo = array(
		'mapcyclefile' => ' ',
		'hostname' => ' ',
        'sv_passwort' => ' ',
        'rcon_passwort' => ' '
    );

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

while( $row = trim(fgets($handle, 128)) ) {

preg_match('/^[^_]+/', $row, $cutinfo);
            
print'<tr style="background-color:'.$color.'">		
       <td style="font-family: tahoma; font-size: 12px;">'.$row[$cutinfo].'</td>
       </tr>'; 
    }     
       
fclose($handle);

}
else
{print'File '.$file.' nicht vorhanden!';}

Im array() teile ich quasi jeder zu filternden Zeilen ein Leerzeichen zu, das dann mit trim() gelöscht werden sollte.....(Das war der Plan) ;)

Brauche nur sowa wie ein Denkanstoss! :-)
 
Du ließt die Datei in einen Array mittels file() ein, durchläufst den array dann mit foreach zeilenweise.
Guckst mittels preg_match() ob in einer Zeile ein Suchmuster vorkommt, z.B. der String "rcon". Wenn er vorkommt passiert nichts, wenn er nicht vorkommt schickste die Zeile an nen Puffer, welcher aus dem Array im Prinzip einen String baut oder wieder einen Array, je nachdem wie du magst.
 
Zuletzt bearbeitet:
Vielleicht nicht ganz so elegant, aber dafür funktioniert es:

PHP:
<?php
  $file = "listenserver.cfg";

  if (file_exists($file)) {
    $handle = fopen($file, 'r');

    echo '<table>';
  
    while (!feof($handle)) {
      $row = fgets($handle,128);
      
      if (substr_count($row, "sv_passwort") < 1 ) {
       #preg_match('/^[^_]+/', $row, $cutinfo);
   
      print'<tr style="background-color:'.$color.'"><td style="font-family: tahoma; font-size: 12px;">'.$row.'</td></tr>'; 
      }
    }     
    fclose($handle);
    echo '</table>';
  } else {
    print'File '.$file.' nicht vorhanden!';
  }  

?>

Du mußt die if-Anweisung nur noch um alle Befehle erweitern, die du nicht haben willst.
 
@ js-mueller:
... mittels preg_match() ob in einer Zeile ein Suchmuster vorkommt, z.B. der String "rcon". Wenn er vorkommt passiert nichts...

Gerade diese Zeilen will ich ja nicht ausgeben, sonder ausselektieren! Evtl. sollte ich doch in eine andere Richtung denken - und zwar einen bestimmten Datenensatz vorgeben und den einfach nur mit if() abgleichen und ausgeben. Dachte mir aber zuerst, das es so einfacher ist... :suspekt:


@ misayre: Leider muss ich sagen das auch dein Code die gewünschten Zeilen nicht aussondert. Diese Variante erscheint mir logisch - nur leider werden selbst die Beispiele im PHP Manual nicht angezeigt - vielmehr zeigen sie sogar Fehler!!

PHP:
$text = 'Dies ist ein Test';
echo strlen($text); // 17

echo substr_count($text, 'es'); // 2

// wird der String auf 's ist ein Test' reduziert,
// lautet das ausgegebene Ergebnis 1
echo substr_count($text, 'es', 3);


Warning: Wrong parameter count for substr_count() in /home/b/bnc.clanserverarea.de/public_html/clan/server_config.php on line 19

Und dieser Code habe ich 1:1 in meine Seite kopiert um diese Funktion zu erforschen.... :(


Also das Manual hat mich nicht grade weiter gebracht - eher noch verwirrt! ;-]
 
Zuletzt bearbeitet:
Ne du hast mich nur net richtig verstanden ;)

Wenn du ne gültige Zeile hast ( Sprich kein rcon oder sowas drin ), dann speichert er die Zeile in einen neuen Array, so wird zeile für Zeile der array nachgebildet.
Hast du ne ungültige Zeile wird die Zeile nicht weiterverwendet, also auch im neuen Array net mehr vorhanden
 
Zurück