Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilen über CSV ausgeben in Array und gruppieren

Einklappen

Neue Werbung 2019

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

  • Zeilen über CSV ausgeben in Array und gruppieren

    Hallo,

    aktuell versuche ich aus einer zu Verfügung stehenden CSV Liste die Ausgaben irgendwie zu "gruppieren". Ausgabe und array bilden funktioniert soweit halbwegs.

    Ich habe hier http://www.php.de/php-tipps-2010/671...-ausgeben.html einen Beitrag gefunden, der ein ähnliches Problem beschreibt, ich weiß aber leider nicht, wie ich das auf mein Problem umbauen kann.

    Auch bezgl. des Gruppenbruchs habe ich versucht mich einzulesen, leider verstehe ich das aber nicht wirklich, bzw. verstehen schon, aber leider nicht umsetzen.

    So sieht die CSV Liste aktuell aus (nach viel Bearbeitung, die Zahl hinten muss ich natürlich noch bereinigen):
    2014-07-23|13.00 m²
    2014-07-23|12.00 m²
    2014-07-23|11.00 m²
    2014-07-23|7.00 m²
    2014-07-18|45.00 m²
    2014-07-18|22.00 m²
    2014-06-18|40.00 m²

    Bei der Ausgabe versuche ich folgendes hinzubekommen

    2014-07-23|(13+12+11+7)/passende Zeilen (hier 4)
    2014-07-18|(45+22+40)/passende Zeilen (hier 3)

    um letztendlich immer einen Durchschnittswert zu bilden.

    Könnte mir bitte vielleicht jemand helfen, ich hab keine Ahnung wie das umsetzen soll, ich denke Gruppenbruch mit counten, aber wie?

    Danke euch.
    Gruss,
    Olaf


  • #2
    hast du schon code anfänge, sowas bspw.
    http://www.php.de/php-einsteiger/934...ei-parsen.html

    Kommentar


    • #3
      Gruppierung und Durchschnitt sind ja typische Aufgaben für eine Datenbank. Warum die CSV-Daten nicht in eine Datenbank importieren und dort per SQL die Aufgaben erledigen?
      Dafür muss keine MySQL-DB herhalten, da reicht eine SQLite die per PDO im Speicher angelegt wird wenn die Mege der CSV-Daten sich in Grenzen hält.
      Im Gegensatz zu einer speziellen Lösung über Arrays hat man hier dann eine ausbaufähige Basis für ähnliche Aufgaben.
      PHP-Klassen auf github

      Kommentar


      • #4
        @jsplit
        ja, das überleg ich mittlerweile auch schon... ich hätte sonst eine temporäre Tabelle machen müssen... jetzt exportiere ich aus der DB in je eine CSV

        @moma
        PHP-Code:
        $varvaluelist mysql_query("SELECT * FROM charts WHERE pid='$pid'");
        while (
        $row mysql_fetch_object($varvaluelist)) {
          
        $chartid  $row->cid;
          
        $varid1   $row->varid1;
          
        $varid2   $row->varid2;
          
        $varfix   $row->varfix;
          
          
        $userdatei fopen("stats/".$pid.".csv","r");
          while(!
        feof($userdatei))  {
            
        $zeile fgets($userdatei4096);
            
            
        // Gebe nur alle Zeilen aus in denen varid1 oder varid2 vorkommt
            // temp später OR preg_match("#,$varid2,#", $zeile)
            
        if (preg_match("#,$varid1,#"$zeile)) {
              
        $val explode(","$zeile); 

              
        // Wenn Datum, dann umwandeln
              
        if (preg_match("#(\d{4})\-(\d{2})\-(\d{2})(.*)#"$val[1], $hits)) {
                  
        $datestats $hits[1]."-".$hits[2]."-".$hits[3];
                  echo 
        $datestats."|";          
              };
              
        $val_last ereg_replace('"'''$val[6]);
              echo 
        $val_last

        Kommentar


        • #5
          ahso: kurz der Sinn des ganzen: ich möchte gern aus geloggten Eingabe-Daten einen Chart erstellen, dafür brauche ich halt diese Datenliste...

          Kommentar


          • #6
            Zitat von phpstarter Beitrag anzeigen
            PHP-Code:
            $varvaluelist mysql_query("SELECT * FROM charts WHERE pid='$pid'");
            while (
            $row mysql_fetch_object($varvaluelist)) {
              
            $chartid  $row->cid;
              
            $varid1   $row->varid1;
              
            $varid2   $row->varid2;
              
            $varfix   $row->varfix;
              
              
            $userdatei fopen("stats/".$pid.".csv","r");
              while(!
            feof($userdatei))  {
                
            $zeile fgets($userdatei4096);
                
                
            // Gebe nur alle Zeilen aus in denen varid1 oder varid2 vorkommt
                // temp später OR preg_match("#,$varid2,#", $zeile)
                
            if (preg_match("#,$varid1,#"$zeile)) {
                  
            $val explode(","$zeile); 

                  
            // Wenn Datum, dann umwandeln
                  
            if (preg_match("#(\d{4})\-(\d{2})\-(\d{2})(.*)#"$val[1], $hits)) {
                      
            $datestats $hits[1]."-".$hits[2]."-".$hits[3];
                      echo 
            $datestats."|";          
                  };
                  
            $val_last ereg_replace('"'''$val[6]);
                  echo 
            $val_last
            Vllt. klingt die Frage jetzt komisch, aber was macht der Code?

            PS: Nur die Info am Rande, ereg_* Funktionen sind schon sehr lange Deprecated, mysql_ sollte auch nicht mer verwendet werden. (Siehe den Hinweis im Manual)

            PS2: du wirst mit dem Code probleme bekommen, sobald die Datenbank größer wird, da du für jede Zeile in der DB eine Datei komplett ausließt.
            mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
            PHP-Code:
            echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

            Kommentar


            • #7
              @ChrisvA

              Der Code fragt aus einer Datenbank im Prinzip die Einstellungen für einen zukünftigen Chart ab. Und ja, pro Chart wird dann eine CSV Datei erstellt (anderes Script, als Cron) und die ausgelesen und im Chart ausgegeben. Es geht eigentlich bei diesem Part nur um die "saubere" Ausgabe der Datenreihen für den Chart. Da aber nicht ganz sauber geloggt wird, ist das etwas problematisch, hier der logauszug im original:

              "21";"2013-12-29 17:02:47";"19";"Kostenrechner wieviel EUR Leuchten in einem bestimmten Zeitraum kosten";;"Germany";"91.63.252.20";"Tägliche Betriebsstundenzahl (ID 94): 5,00
              Berechnungsjahre (ID 95): 10,00
              Lebensdauer des Leuchtmittels (ID 96): 2.000,00
              ";"Anzahl Leuchtmittel über Zeitraum (ID 9: 9,13
              ";
              "22";"2013-12-29 17:10:02";"18";"Überschlagsrechnung Photovoltaikanlagen Ertrag";;"Germany";"91.63.252.20";"Modul-Wirkungsgrad (ID 90): 14,00
              Modulfläche (ID 89): 25,00
              Globalstrahlung (ID 91): 1.000,00
              ";"Gesamtleistung PV-Anlage (ID 92): 3.500,00
              ";
              "23";"2013-12-29 17:13:04";"18";"Überschlagsrechnung Photovoltaikanlagen Ertrag";;"Germany";"91.63.252.20";"Modul-Wirkungsgrad (ID 90): 17,00 %
              Modulfläche (ID 89): 30,00 m²
              Globalstrahlung (ID 91): 1.000,00 kWh/m²a
              ";"Gesamtleistung PV-Anlage (ID 92): 5.100,00

              Das Problem ist das Auslesen der Daten in den Feldern (müssen alle auseinandergenommen werden), darauf wollte ich verzichten und die Daten erst einmal vereinfacht in CSV exportieren.

              PS:> ja ich weiß das mit ereg_replace... sorry, war in dem Moment einfacher für mich...

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Gruppierung und Durchschnitt sind ja typische Aufgaben für eine Datenbank. Warum die CSV-Daten nicht in eine Datenbank importieren und dort per SQL die Aufgaben erledigen?
                Zitat von phpstarter Beitrag anzeigen
                @jsplit
                jetzt exportiere ich aus der DB in je eine CSV

                PHP-Code:
                $varvaluelist mysql_query("SELECT * FROM charts WHERE pid='$pid'"); 
                ...
                Was ist nochmals konkret der Grund warum du die Auswertung nicht direkt in der DB machst, wenn du eh schon eine hast?
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  @hausl

                  ähm,

                  a) weil ich die Felder nicht ansständig extrahiert bekommen habe und ich einen Zwischenschritt einbauen wollte, damit es für mich nicht zu kompliziert wird
                  b) dachte ich mir... also wenn später an mehreren Stellen ein Chart integriert wird (diverse Homepages) könnte es evtl. weniger Belastung für die Datenbank sein, wenn ich eine feste CSV habe, in der nicht geschrieben wird, ausserdem liegt die Tabelle dann später auch lokal beim user, er muss also nicht ständig auf die zentrale DB zugreifen, sondern für die Abfrage des Charts nur seine eigene CSV zugreifen. Ich hab natürlich keinen Schimmer, wie groß die CSV später werden könnte... klar, wenn die zu groß ist, gehts wieder nicht.

                  Kommentar

                  Lädt...
                  X