Textdatei weiter verwenden

Nick Scharz

Grünschnabel
Hiho =)

Ich möchte mit der Datei index.php eine Textdatei auslesen die sich in einem andern Ordner auf dem Server befindet (und sich jede Minute ändert)… Die Textdatei enthält in jeder Zeile einen Name (die Anzahl ist verschieden), so zum Beispiel:

Manuel
Herbert
Sascha
Nick

Die Namen bräuchte ich dann alphabetisch (nich ganz so wichtig) geordnet durch ein Komma getrennt zum Beispiel als $namen. So zum Beispiel:

Herbert, Manuel, Nick, Sascha

Dann kommt noch was erschwerend hinzu, in der txt-Datei befinden sich immer zwei Namen die nicht mit angezeigt werden sollen (immer die gleichen). Ich hab jetzt schon viel rumprobiert, allerdings wars dann weder gar nicht durch ein Komma getrennt oder nach dem letzten Name war auch noch ein Komma, und das sortieren der Namen sowie das rausnehmen der zwei Namen hab ich gar nicht hinbekommen. Ich bin leider noch nen totaler Anfänger was php betrifft… Kann mir jemand helfen? Bzw. is sowas überhaupt möglich? Für Hilfe wäre ich dankbar! :)
 
Wie du aus einer Datei ließt scheinst du ja schon herausgefunden zu haben :)
Versuch doch mal, jede Zeile (also jeden Namen) in ein Array zu packen.
PHP:
$array = array();
$datei = fopen("test.txt", "r");

while ( $zeile = fgets($datei,1024) ) {
  $array[] = $zeile;
}

fclose($datei);
Dann kannst du das Array mit der Funktion sort() einfach sortieren und dann ausgeben.
Um die 2 Namen zu ignorieren verwendest du einfach eine if-Anweisung:
PHP:
sort( $array );

foreach( $array as $name ) {
  if( $zeile != "bösername1" && $zeile != "bösername2" ) {
    echo $name.", ";
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Noch eine Möglichkeit:

PHP:
<?php 
      $file = file('test.txt');
      natsort($file);      

      for($i=0;$i < count($file);$i++){
        $name_list[] = trim($file[$i]);
          
        if($name_list[$i] != 'Toni' && $name_list[$i] != 'Fritz') {         
          $new_name[] = $name_list[$i];
        }        
       }
      
      $new_text = implode(',',$new_name);
      echo $new_text;
 ?>
 
Hiho =)

Erstmal vielen dank an euch zwei! :)

Zum ersten: Das Problem mit dem Komma bleibt dort leider und die Namen werden leider och nich raus genommen....

Zum zweiten: Klappt wirklich super! Nur leider wirds nich sortiert, was aber och nich wirklich wichtig ist...

Eine Frage hätte ich noch, ists möglich verschiedenen Namen-Gruppen bestimmte formatierungen zuzuweisen ohne das das Komma davon beftroffen ist? (So etwa drei Gruppen wären das, und es sind nicht immer alle Namen aus der Gruppe vorhanden...)

Zum Beispiel:

Nick
Sascha

= <b><font color="#FF0000"></font></b>

= Andreas, Nick, Michael, Sascha
 
Hallo!

Versuche es mal so:
PHP:
<?php
$file = file("datei.txt");
 
for($i=0; $i < count($file); $i++) {
    $name_list[] = trim($file[$i]);
    if( ($name_list[$i] != "Manuel") AND ($name_list[$i] != "Herbert") ) {
        $new_name[] = $name_list[$i];
        natcasesort($new_name);
    }
}

$new_name = str_replace("Nick", "<b><font color=\"#FF0000\">Nick</font></b>", $new_name);
$new_name = str_replace("Sascha", "<b><font color=\"#FF0000\">Sascha</font></b>", $new_name);
 
$new_text = implode(", ",$new_name);
 
echo $new_text;
?>
Gruss Dr Dau
 
.....und wird sogar (unabhängig von Gross-/Kleichschreibung) sortiert. ;)

Wie Du weitere Namen aus der Suche auschliesst und/oder weitere Namen farbig/fett darstellst, ist ja sicherlich selbsterklärend. ;)
 
Hiho =)

Japp, das hab ich soweit alles hin bekommen... Es hat sich allerdings ein neues Problem ergeben... Ich hab zum testen eine Textdatei in nem andern Ordner auf meinem Server verwendet und ging davon aus die original Datei auch einfach über nen Link öffnen zu können... Allerdings musste ich feststellen das ich nur via ftp an die Textdatei heran komme. Ich hab nen bissel rum gesucht und rum probiert und dabei is das raus gekommen:

PHP:
$ftp_server = "xxx";
$ftp_user_name = "xxx";
$ftp_user_pass = "xxx";

$conn_id = ftp_connect("$ftp_server");

$login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass");

?

ftp_quit($conn_id);

Nun müsste das ganze ja an die Stelle des Fragezeichens, nur weiß ich leider nicht wie im ftp die Textdatei geöffnet bekomme... :( Könntest du mir nochmal helfen? Bzw. macht es überhaupt Sinn das ganze so zu machen?

Gruß
Nick Scharz
 
Lade die Datei runter und greife dann lokal darauf zu. ;)
PHP:
<?php
$ftp_server = "xxx";
$ftp_user_name = "xxx";
$ftp_user_pass = "xxx";

$conn_id = ftp_connect($ftp_server);
ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
 
$result = @ftp_get($conn_id, "kopie.txt", "./www/original.txt", FTP_ASCII);
 
if($result) {
     echo "Datei wurde runtergeladen.";
} else {
     echo "Es ist ein Fehler aufgetreten.";
}

ftp_quit($conn_id);
?>
"kopie.txt" ist der Name den die Datei nach dem runterladen bekommt.
"./www/original.txt" ist der Pfad/Dateiname zu der Datei auf dem entferntem Server, ausgehend vom Loginverzeichnis des FTP-Servers.
FTP_ASCII gibt die Anweisung die Datei beim Download als Textdatei zu behandeln.
Dort wo "Datei wurde runtergeladen." per echo() ausgegeben wird, kannst Du den Code zum auslesen der Datei einsetzen..... dann wird dieser nämlich nur dann ausgeführt wenn die Datei auch runtergeladen wurde. ;)
 
Hiho =)

Funktioniert super! Thx!
Ich habs nun so gemacht das ich die ftp Abfrage in ner seperaten Datei mache und mit nem Cronjob regelmäßig ausführe. In der index frage ich dann jeweils nur die Textdatei ab die ja auf meinen Server regelmäßig gespeichert wird... (Damit nicht bei jedem refresh der index eine ftp-Verbind hergestellt werden muss.)

Sag mal bekomme ich auch sowas wieder getrennt:

%!%#xx-xxxxxxx7@12.07.2006@20:35@PM

Die Zahl 7, das Datum, die Zeit und PM sind variabel. Ich brächte im im Grunde die Zahl, das Datum und die Zeit jeweils als $user, $datum, $zeit. Ich hab versucht das ganze mit list zu trennen, bekomme allerdings als Ergebnis immer nur array... Ich hoffe ich strapiziere deine Gelduld hier nicht zu viel... :-(

Gruß
Nick Scharz
 
Zurück