"String Slicing" der ganz besonderen art!

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

  • "String Slicing" der ganz besonderen art!

    *schmunzel*

    Ich bins mal wieder, mit dem Auftrag das forum vor arbeitslosigkeit zu retten *g* (kleiner anfall von Ironie!!)


    Also, ich habe folgende Aufgabe. Ich bekomme aus unserem System eine CSV raus, der inhalt schaut etwas sonderlich aus, und zwar so:

    PHP-Code:
    1128;;ALL39242;HUBSWITCH24PORT24*TP;HUB SWITCH  24-Port 24*TP Fast Ethernet;24 x 10/100Mbit 1 x Erweiterungslot CAT5 19";;1;NETZ;;4;1;0;0;0;0;0;0;1;STK;M16;;;0;kg.;;0;;604.31;604.31;701;0;0;0;    2155;01;12809;403;403;73439;;;;49 
    Unschwer ist es nun zu erkennen das es sich dabei um einen Artikelstamm handelt. Meine wenigkeit möchte sich nun mal ausgibeig mit String Slicing beschäftigen (irgendwo muss ja man mal anangen) Allerdings sehe ich hier gleich grenzen (wo vielleicht keine Sind?!?)

    Mein Ziel soll es sein, eine CSV in eine DB reinzubekommen. So weit so gut, wie mann ne Datei öffnet weiss ich mittlereilen.

    Nun habe ich diesen Inhalt der Datei vor mir liegen. Jedes Segment dieses strings stellt später für mich eine Spalte in einer DB dar.
    Erste Spalte wäre hier nun die Artikelnummer, mit inhalt "1128", die zweite wäre EANNR, mit inhalt "". So weit so gut. Ich muss nun aus meiner datei Zeile für zeile den string einlesen, zerteilen und in ein Array packen. Wie das array auszusehen hat weiss ich eigentlich auch schon, nachdem ich das gemacht habe kommt der inhalt des Arrays in die DB, danach kommt die nächste Zeile aus dem CSV dran. Mein Problem besteht nun darin, wie zerlege ich erst mal diesen einen string. Und mein nächstes Problem, wie kann ich festlegen das php weiss das es an der zeilenende angelangt ist?
    Wenn sich mir einer annehmen würde wäre ich euch sehr dankbar (Schecks sind jedoch gerade alle *gg*)
    Evt würde mir auch einen guten Fingerzeig oder etwas ähnlchem mit dem ich was anfangen könnte weiterhelfen...

    Dank & Gruß

    Manfred

  • #2
    normalerweise könntest du ja am trenner ";" splitten, bei dir scheinen aber
    solche auch in den zellen zu stehen. oder gibt es auch leerzellen dazwischen?
    Mal sehen ob da jemand nen tipp hat, ich weiß net so genau wie das mit den vielen ";" ist. vielleicht muss man auch erst die überflüssigen entfernen, bzw. auf eines reduzieren und dann am ";" splitten?
    [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

    Kommentar


    • #3
      Da meine CVS im moment mehr als 5000 dieser Zeilen hat kann ich das so nicht bestätigen, aber ich glaube weniger das das ; im inhalt mit drinn ist. Und wenn ja liese sich das in unseren WWSystem ändern, denke ich. Hir sinds nur so viele weil einige zellen einfach nur leer sind, dh. ohne inhalt. Tatsächlich beschneidet hier jedes semikolon ein feld, das ist schon richtig...

      CU

      Kommentar


      • #4
        PHP-Code:
        // Datei einlesen -> zeilenweise
        $inhalt_als_array file('meineDatei.cvs');
        // SQL String bauen
        $sql='';
        for(
        $i=0;$i<count($inhalt_als_array);++$i)
           
        $sql.=($sql?',':'')."('".implode("','",explode(";",$inhalt_als_array[$i]))."')");
        // SQL ausführen
        $mysql_query("insert ... values ".$sql); 
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          Wowow.... super. Werde gleich anfangen zu experimentieren!

          Hab vielen Dank!

          Cu bP

          Kommentar


          • #6
            Wenn es sich um eine MySQL DB handelt, sollte auch http://www.mysql.de/doc/de/LOAD_DATA.html möglich sein.
            mfg
            Günni


            Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
            Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
            Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
            City-Tiger - Online durch die Straßen tigern...

            Kommentar


            • #7
              @ Günni, das ist auch eine überlegung wert!

              @ TBT Dein Code enthielt ein ) am schluss zuviel

              Mal abgesehen von Günnis Tip, wie bearbeite ich jetzt den vorhandenen String weiter, noch ist es ganze als kompletter string in einem Array hinterlegt....


              Cu bP

              Kommentar


              • #8
                Original geschrieben von BlackPixel
                wie bearbeite ich jetzt den vorhandenen String weiter, noch ist es ganze als kompletter string in einem Array hinterlegt....
                an einem bestimmten trennzeichen aufsplitten geht mit explode (->manual!)
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Ich schwanke gerade nur so hin und her. Das mit LOAD FILE INTO wäre mir jetzt irgendwie doch lieber... glaube ich
                  PHP-Code:
                  require("config.inc.php"); 
                  $verbindung mysql_connect($host$dbuser$dbpasswd) or die('Kann mich nicht mit der Datenbank verbinden!') ;
                  mysql_select_db($db$verbindung);

                  $test1 mysql_query("LOAD DATA LOCAL INFILE 'ARTIKEL.CSV' INTO TABLE artikelstamm FIELDS TERMINATED BY ';'"); 
                  allerdings passiert da noch rein rein gar nichts?!? Hab das manual 5 mal rauf und runter gelesen...?!?

                  Cu Manfred

                  @ wahsaga explode werd ich mir mal notieren, scheint recht hilfreich zu sein!

                  Kommentar


                  • #10
                    Ok, habs hinbekommen.

                    So sieht das nu aus:

                    PHP-Code:
                    $sql mysql_query('LOAD DATA INFILE \'\\\\wampp2c\\\\htdocs\\\\shopsystem\\\\test\\\\ARTIKEL.CSV\' INTO TABLE `artikelstamm` FIELDS TERMINATED BY \';\' ENCLOSED BY \'"\' 
                    ESCAPED BY \'\\\\\' LINES TERMINATED BY \'\\r\\n\''
                    ); 
                    Kann ich da auch nur den Dateinamen angeben, oder muss immer der expliziete pfad angegeben werden?!?
                    Nur beim Dateinamen macht er leider gar nix
                    Gruß Manfred

                    Kommentar


                    • #11
                      PHP-Code:
                      mysql_query("bla bla bla 'dateiname' bla bla bla"); 
                      doppelte statt einfache " verwenden

                      Kommentar


                      • #12
                        PHP-Code:
                        $sql mysql_query("LOAD DATA INFILE 'ARTIKEL.CSV' INTO TABLE 'artikelstamm' FIELDS TERMINATED BY ';' ENCLOSED BY '\' ESCAPED BY '\\\\' LINES TERMINATED BY '\\r\\n'"); 
                        So?

                        Funzt immer noh nicht?!?

                        Wie wärs wenn ich mir das file fopen in ein Array hohle und anstatt die Datei das array in meine sql schreibe?!?
                        Wieviel zeichen packt denn so ein ormales array?
                        Bei mir könnens mal schnell um die 5000-6000 Datensätze werden!

                        Cu bP

                        Kommentar


                        • #13
                          kann es sein, dass er sich an dem
                          19"
                          stört? evtl. denkt mysql ja, das ab jetzt ein string kommt und erkennt die anderen felder danach dann icht mehr als felder sondern packt die alle zu dem string zusammen

                          probier mal 19\" statt 19"
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            könnte sein, was ich aber nicht glaube. Bei meinem dargestelten Beispiel handelt es sich um Artikel 1148 oder so, und es geht hier im Test schon bei Artikel 1000 Los, dh. er muss bevor er sowieso erst mal dahin kommt 148 datensäzte bearbeiten, und speichern, was er aber nicht macht.

                            Ausserdem, wenn ich den Pfad zu datei expolizit angebe, geht es, ich denke, php ist der pfad zur datei bekannt, jedoch nicht als absoluter im sql query...

                            CU bP

                            Kommentar


                            • #15
                              Original geschrieben von BlackPixel
                              Ausserdem, wenn ich den Pfad zu datei expolizit angebe, geht es, ich denke, php ist der pfad zur datei bekannt, jedoch nicht als absoluter im sql query...
                              php übergibt die query einfach nur als textstring an die datenbank, danach ist diese dran mit arbeiten.
                              ob php dabei weiss, wo die datei liegt, oder wie viel uhr es in china gerade ist, kriegt die db dabei nicht mit, das muss ihr schon explizit gesagt werden.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X