fgetcsv - nur bestimmte zeilen auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • fgetcsv - nur bestimmte zeilen auslesen

    Hallöchen,
    ich hab mir ein Script aus verschiedenen Snippets zusammen gebastelt welches Daten aus einer .txt vom Server läd und in die database.txt und dannin eine Datenbank schreibt.
    Die TXT kommt vom Server eines Browsergames und enthält die Spielerdaten.

    Der Aufbau der TXT Daten sieht so aus:
    player_id, name, ally_id, villages, points, rank
    Beispiel Datensatz:
    5521,anddie,100,9,43213,459

    Die TXT enthält allerdings über 2000 Zeilen, sodass jedes mal wenn das Script aktualisiert wird viele Daten geschrieben werden müssen.

    Das funktioniert auch alles.

    Ich würde jetzt allerdings gerne nur bestimmte Zeilen in die DB schreiben welche die gewünschte ally_id enthalten.

    Kann mir da jemand helfen? Bin schon ne Weile raus aus dem aktiven scripting.
    Ich vermute, dass ich das arrray $data nach der id durchsuchen muss. Aber wie genau das geht - da steh ich grad auf dem Schlauch

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);

    $dbhost 'localhost';
    $dbuser 'ds_database';
    $dbpass 'passwort';

    $conn mysql_connect($dbhost$dbuser$dbpass) or die ('Error connecting to mysql');
    $dbname 'ds_database';
    mysql_select_db($dbname);


    $file="database.txt";
        
    //USER
        //Tabelle "player" leeren
        
    mysql_query("TRUNCATE TABLE player");
        
    //Spielerdaten von Server laden und...
        
    $lines gzfile('http://de123.die-staemme.de/map/player.txt.gz');
        if(!
    is_array($lines)){die('Datei konnte nicht geöffnet werden');}
        
    //...Datei "databases.txt" öffnen und schreiben
        
    $fp=fopen($file'w');
        foreach(
    $lines as $line){
            
    fwrite($fp,  utf8_decode(urldecode($line)));
        }

    //fgetcsv als alternative zu LOAD DATA LOCAL INFILE - test
    $row 0;
    $handle fopen($file"r");

    while ((
    $data fgetcsv($handle1000",")) !== FALSE) {
        if (
    $row == 0)
            {
            
    $num count($data);
            
    $row++;
            for (
    $c=0$c $num$c++) {
            }
        } else {
            
    //Zählt die Anzahl der Felder in einer Reihe
            
    $num count($data);
            
    //Den Zeilwert um 1 erhöhren (Also eine Zeile weiter springen)
            
    $row++;
            
    //iteriert / wiederholt das für jede Zeile der Datei
            
    for ($c=0$c $num$c++)

            
    $query =
            
    "INSERT INTO player (player_id, name, ally_id, villages, points, rank)
            VALUES ('"
    .$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."')"

            
    or die(mysql_error());
            if(
    mysql_query($query))
            echo 
    "Erfolgreich eingetragen<br/>";
            else
            echo 
    mysql_error() ;
            echo 
    "<br/>";
        }
    }

    fwrite($fp"");
    fclose($fp);
    unset(
    $lines);
    unset(
    $line);

    ?>
    Zuletzt geändert von analyzer; 11.05.2016, 17:43.

  • #2
    PHP-Code:
    $query =
            
    "INSERT INTO player (player_id, name, ally_id, villages, points, rank)
            VALUES ('"
    .$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."')" 
    Nach deinem Programm ist ally_id = $data[2]. Demnach..:

    PHP-Code:
     .. if ($data[2] == $gewünschte_ally_id) .. tu dies .. tu das 
    War das Deine Frage?
    mfg

    Kommentar

    Lädt...
    X