CSV-Datei in Variablen zerlegen

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

  • CSV-Datei in Variablen zerlegen

    Hallo,

    ich habe folgende CSV-Datei:



    Mit folgendem Code kann ich mir den Inhalt mit php anzeigen lassen:

    PHP-Code:
    <?php
    error_reporting
    (0);
    $row 1;
                                          
    $handle fopen ("file.csv","r");              
    while ( (
    $data fgetcsv ($handle1000",")) !== FALSE 
    {
                                                    
       
    $num count ($data);
                                           
       
    $row++;  
                                        
                                                   
       for (
    $c=0$c $num$c++) 
       {     

           print 
    $data[$c] . "<br>\n";            
       }
    }
    fclose ($handle);
    Jetzt bräuchte ich einen Denkanstoß wie ich die einzelnen Zellen in Variablen schreiben lassen kann. Damit ich diese weiterverarbeiten kann.
    Die CSV-Dateien die ich verarbeiten möchte, sind immer nach diesem Muster aufgebaut.

    LG Sven
    Zuletzt geändert von Sven4972; 15.05.2020, 19:21.

  • #2
    Hey Sven4972,


    ich habe mal einen Beispiel Script entwickelt. Mit diesem Script kannst du die gelesene Daten in einer Tabelle ansehen. Es ist auch ersichtlich wie die weiterverarbeitung mit Variablen funktioniert.




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


    //Variablen definieren
    $erste_zeile ""// Dies ist die Variable für die Erste Zeile
    $ueberschriften ""// Dies ist die Variable für die Spaltennamen
    $alle_spieler = array(); //Dies ist der Array um die Spieler einzeln zu speichern

    // Datei Auslesen                   
    $handle fopen ("file.csv","r");

    //Zähler
    $count 0;
              
    while((
    $data fgetcsv ($handle1000",")) !== FALSE) {
                                                    
       foreach(
    $data as $dat) {

        
    // Erste Zeile herausfiltern
        
    if($count == 0) { $erste_zeile explode(";",$dat); }

        
    // Zweite Zeile herausfiltern
        
    elseif($count == 1) { $ueberschriften explode(";",$dat); }


        
    // Alle Spieler in Array eintragen
        
    else { 

            
    $arr explode(";"$dat); //Hier wird durch explode der vorherige String zu einem Array
            
    $alle_spieler[] = $arr// Hier wird jeder Datensatz in alle_spieler array hinzugefügt

        
    }

        
    $count++;
       }


    }
    // Datei Schliessen
    fclose ($handle);

    ?>

    <p>
    Erste Zeile = <?php var_dump($erste_zeile); ?>
    </p>

    <table border="1">

        <tr>
        <?php
        
    /* Tabellen Überschrift */
        
    foreach($ueberschriften as $ueberschrift) {
            echo 
    "<th>" $ueberschrift "</th>";
        }
        echo 
    "</tr>";

        
    /* Da alle Spieler in einem Multi Array gespeichert wurden, muss hier zweimal foreach verwendet werden */
        
    foreach($alle_spieler as $spieler) {

            echo 
    "<tr>";

            foreach(
    $spieler as $sp) {
                echo 
    "<td>" $sp "</td>";
            }

            echo 
    "</tr>";

        }
        
    ?>
        </tr>

    </table>
    Was wolltest du denn ganz genau mit den ausgelesenen Daten machen?
    Die in einer Datenbank speichern oder anderweitig verwenden?


    Ich könnte dir besser behilflich sein, wenn ich wüsste was du genau damit vor hast.




    Mit freundlichen Grüßen


    Flavaslava








    Wichtiger Notiz:
    Ich gebe kein Gewähr das dieses Script einwandfrei läuft. Bitte achte stets darauf einen Backup zu machen bevor du dieses Script benutzt. Dieses Script ist nur ein Vorschlag. Es gibt mehrere Wege zur Lösung. Es wurden keine Sicherheitsaspekte oder sonstige sachen beachtet, da dies nur ein Beispiel ist.

    Kommentar


    • #3
      Hallo,

      danke für Deine Hilfe.

      Nach dem Auslesen, möchte ich die Variablen dann in die Datenbank schreiben.
      Pro Spieler eine neue Spalte in der vorhandenen Tabelle.


      LG Sven

      Kommentar


      • #4
        Hey Sven,


        hab hier mal etwas gebastelt, eventuell hilft es dir.
        Ich habe die Tabellen Spalten namen nach der von der Excel Datei gemacht.


        Hier ist die Tabelle:


        PHP-Code:

        CREATE TABLE 
        `spieler` (
          `
        idint(11NOT NULL,
          `
        spielernamevarchar(100NOT NULL,
          `
        summeint(11NOT NULL,
          `
        gewonnenint(11NOT NULL,
          `
        verlorenint(11NOT NULL,
          `
        anderegewonnenint(11NOT NULL,
          `
        gesamtpunkteint(11NOT NULL
         
        ENGINE=InnoDB;
         
        ALTER TABLE `spieler`
          
        ADD PRIMARY KEY (`id`);

        ALTER TABLE `spieler`
          
        MODIFY `idint(11NOT NULL AUTO_INCREMENT
        Und hier ist der PHP-Script dazu:


        PHP-Code:
        <?php

        //Variablen definieren
        $erste_zeile ""// Dies ist die Variable für die Erste Zeile
        $ueberschriften ""// Dies ist die Variable für die Spaltennamen
        $alle_spieler = array(); //Dies ist der Array um die Spieler einzeln zu speichern

        // Datei Auslesen                   
        $handle fopen ("file.csv","r");

        //Zähler
        $count 0;
                  
        while((
        $data fgetcsv ($handle1000",")) !== FALSE) {
                                                        
           foreach(
        $data as $dat) {

            
        // Erste Zeile herausfiltern
            
        if($count == 0) { $erste_zeile explode(";",$dat); }

            
        // Zweite Zeile herausfiltern
            
        elseif($count == 1) { $ueberschriften explode(";",$dat); }


            
        // Alle Spieler in Array eintragen
            
        else { 

                
        $arr explode(";"$dat); //Hier wird durch explode der vorherige String zu einem Array
                
        $alle_spieler[] = $arr// Hier wird jeder Datensatz in alle_spieler array hinzugefügt

            
        }

            
        $count++;
           }


        }
        // Datei Schliessen
        fclose ($handle);

        // Datenbankverbindungsaufbau
        $dbConnect = new mysqli("localhost","Datenbankbenutzername","Datenbankkennwort","Datenbankname");

        //Fehler Variable definieren
        $error = array();


        // Alle Spieler durchlaufen
        foreach($alle_spieler as $spieler) {

            
        // In die Tabelle eintragen
            
        $abfrage $dbConnect->query("INSERT INTO spieler(spielername,summe,gewonnen,verloren,anderegewonnen,gesamtpunkte) VALUES('".$spieler[0]."','".$spieler[1]."','".$spieler[2]."','".$spieler[3]."','".$spieler[4]."','".$spieler[5]."')");

            
        // Überprüfen ob die Daten eingetragen worden sind
            
        if($abfrage) {
                
        $error[] = "true";
            }
            else {
                
        $error[] = "false";
            }

        }

        // Ausgabe von von Fehlermeldung
        if(in_array("false",$error)) {
            echo 
        "Es ist ein Fehler aufgetreten.";
        }
        else {
            echo 
        "Daten wurden erfolgreich in die Datenbank eingetragen.";
        }

        Ich habe die Tabelle die man sehen konnte weggemacht, wusste nicht ob du es brauchst, habe dafür eine Fehlermeldung eingebaut, so dass du sehen kannst ob die Daten eingetragen worden sind.


        Vergiss bitte nicht bei der Datenbankverbindungsaufbau die Daten anzupassen.




        Mfg
        Flavaslava



        Wichtiger Notiz:
        Ich gebe kein Gewähr das dieses Script einwandfrei läuft. Bitte achte stets darauf einen Backup zu machen bevor du dieses Script benutzt. Dieses Script ist nur ein Vorschlag. Es gibt mehrere Wege zur Lösung. Es wurden keine Sicherheitsaspekte oder sonstige sachen beachtet, da dies nur ein Beispiel ist.

        Kommentar


        • #5
          Hallo,

          habe die Datenbank und das Eintragen in die Tabelle, an meine vorhandene Tabelle angepasst und es läuft schon fast so wie gedacht.
          Ich bräuchte noch aus der Zelle C1 das Datum und die Zeit einzeln.

          Wie könnte ich das realisieren?


          LG Sven

          Kommentar


          • #6
            du kannst mithilfe von $erste_zeile Array auf die Daten zugreifen, einfach ein var_dump($erste_zeile) machen und schauen wo sich das datum befindet, diesen herausfiltern und dann kannst du mit explode(" ", $array); den string in ein array umwandeln und dann hast du im ersten array das Datum und in dem zweiten Array die Zeit.


            Ein Beispiel:


            PHP-Code:
            var_dump($erste_zeile);

            $zeit explode(" "$erste_zeile[2]);

            echo 
            "<br>";

            var_dump($zeit);

            echo 
            "<br>";
            $datum $zeit[0];$uhrzeit $zeit[1];

            echo 
            "Datum = " $datum;

            echo 
            "<br>";

            echo 
            "Uhrzeit = " $uhrzeit

            Die Ausgabe könnte so aussehen:


            Code:
            
            array(6) {   [0]=>   string(3) "445"   [1]=>   string(2) "36"   [2]=>   string(16) "15.05.2020 15:06"   [3]=>   string(0) ""   [4]=>   string(0) ""   [5]=>   string(0) "" } 
            array(2) {   [0]=>   string(10) "15.05.2020"   [1]=>   string(5) "15:06" } 
            Datum = 15.05.2020
            Uhrzeit = 15:06

            Kommentar


            • #7
              Hallo,

              danke für deine Hilfe und Hinweise, es läuft jetzt so wie ich es haben möchte.

              LG Sven

              Kommentar

              Lädt...
              X