Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Textdatei mit Trennzeichen in Datenbank schreiben

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

  • [Erledigt] Textdatei mit Trennzeichen in Datenbank schreiben

    Hallo,
    ich stehe bei folgendem Problem gerade etwas auf dem Schlauch:

    Ich muss eine Textdatei (kein CSV) öffnen, zerlegen und in eine Datenbank schreiben.
    Die Textdatei übergibt die Daten zeilenweise und mit Semikolon getrennt.

    Bsp.:
    daten1; daten2; daten3;
    daten4; daten5; daten6;
    usw...

    Jede Zeile soll einen Datensatz mit 3 Einträgen ergeben.

    Öffnen zerlegen und auslesen klappt:
    PHP-Code:
    <?php
    $fp 
    fopen("test.txt","r");
    if (
    $fp)
    {
    while(!
    feof($fp))
    {
    $text fgets($fp);
    $array explode(";",$text);

    echo 
    $array[0]."<br>".$array[1]."<br>".$array[2]."<br>";


    }
    fclose($fp);
    }
    ?>
    Wie bekomme ich das jetzt so hin, dass ich je einen Datensatz pro Zeile in die Datenbank bekomme?

    Gruß Micha


  • #2
    Wo genau ist den dein Problem?

    Kommentar


    • #3
      Konkret muss ich die Daten so aufbereiten, dass ich sie in eine Datenbank eintragen kann.
      Also wie ich oben beschrieben habe "Eine Zeile soll einen Datensatz mit 3 Feldern ergeben"

      Zur Zeit gebe ich ja alle Daten aus...

      Kommentar


      • #4
        Den Inhalt der 3 Felder hast du ja schon... Der Rest ist relativ einfach. Entweder du machst pro Schleifendurchlauf einen Query, der die Daten einträgt oder du generierst einen Query, den du hinterher abschickst...

        PHP-Code:
        $insert = array();
        while(!
        feof($fp)) 

        $text fgets($fp); 
        $array explode(";",$text); 
        $insert[] = "('".mysql_escape_string($array[0])."', '".mysql_escape_string($array[1])."',  '".mysql_escape_string($array[2])."')";

        }
        fclose($fp);

        $query "INSERT INTO `table` (`daten1`, `daten2`, `daten3`) VALUES ";
        $query .= implode(','$insert);
        mysql_query($query) or die(mysql_error()); 
        so in der art..

        Kommentar


        • #5
          Selbstverständlich ist das ein CSV-Format, wobei als Trennzeichen nicht ein Komma sondern ein Semikolon dient. Da die Felder nicht in Doppelhochkomams stehen kann es Lesefehler geben, wenn ein Datensatz selbst ein Semikolon enthält. Falls man bei der Erzeugung der Datei die Felder einpacken kann, dann solltest du das machen bzw. anfordern.
          Einlesen kann man das sehr einfach mit:

          PHP-Code:
          $filename 'datei.csv';
          $fp fopen$filename"r" );
          while (
          $felder fgetcsv($fp1024,";")) {

            
          $sql "INSERT INTO tbl SET
                       col0 = '" 
          mysql_real_escape_string($felder[0]) . "',
                       col1 = '" 
          mysql_real_escape_string($felder[1]) . "'";
            
          mysql_query($sql);

          PHP-Code:
          if ($var != 0) {
            
          $var 0;

          Kommentar


          • #6
            Hey Papst

            genau das ist es!!!!

            Vielen Dank!

            Gruß Micha

            Kommentar


            • #7
              Danke auch an Wolla für den alternativen Vorschlag!

              Kommentar


              • #8
                noch ein kleiner Tipp:

                PHP-Code:
                if (!is_readable($filename)) {
                  die(
                "$filename ist nicht lesbar oder nicht vorhanden");

                Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

                Kommentar


                • #9
                  Zitat von der_micha Beitrag anzeigen
                  Hey Papst

                  genau das ist es!!!!

                  Vielen Dank!

                  Gruß Micha
                  sieh es nicht als alternative sondern als ergänzung!

                  Kommentar

                  Lädt...
                  X