Daten aus Textdatei lesen, ändern und in Textdatei schreiben

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

  • Daten aus Textdatei lesen, ändern und in Textdatei schreiben

    Hallo liebe php'ler,

    ich kenne mich mit php ein wenig aus, jedoch bin ich eher der "anpasser".
    Ich möchte gern folgendes realisieren:

    Eine habe HTML Tabelle mit Daten, welche per PHP Script aktualisiert werden soll.
    HTML-Code:
    Name | Jan | Feb | Mar | Apr ...
    -------------------------------
    Andy | 12 | 23 | 23 | x ...
    Stefan | 22 | 13 | 45 | x ...
    Jeden Monat kommt also eine neue Zahl beim entsprechenden Namen hinzu.

    Die neuen Daten erhalte ich aus der update_apr.txt (für den Monat April):

    Andy|45
    Stefan|34
    Name3|23
    Name4|11

    Die neuen Zahlen sollen in der Tabelle, der Spalte Apr, hinzugefügt werden.


    Wie geht man am besten vor? Man müsste mit PHP jede Zeile auslesen und Name+Wert trennen, und diese dann in der ensprechenden Spalte ausgeben lassen.
    Könnte ihr mir hierbei etwas behilflich sein? Wonach muss ich schauen?

    Danke.
    lg
    McKay

  • #2
    Verstehe ich das richtig, du möchtest mit PHP eine Textdatei lesen und die Daten in eine HTML-Datei einbauen? Warum ersetzt du die HTML-Datei nicht durch ein PHP-Script, dass die Tabelle on-the-fly erzeugt?

    Kommentar


    • #3
      Hallo,

      ja das ginge auch. Man müsste dann doch im PHP Script angeben wann er <tr> setzen soll, da komm ich schonwieder nicht mit zurecht

      Hab schon einige Stunden herumprobiert und gegoogelt.
      Wenn mir jemand einen Denkanstoß oder nen Schubs geben könnte wäre mir vllt schon geholfen

      Kommentar


      • #4
        Zeig doch mal deinen bisherigen Code.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          HTML Tabelle (gekürzt):
          HTML-Code:
          <table border="0" cellspacing="0" cellpadding="0" width="100%" id="table">
          <tr valign="top">
          <td>Mitglied</td>
          <td>Jan</td>
          <td>Feb</td>
          <td>M&auml;r</td>
          <td>Apr</td>
          <td>Mai</td>
          <td>Jun</td>
          <td>Jul</td>
          <td>Aug</td>
          <td>Sep</td>
          <td>Okt</td>
          <td>Nov</td>
          <td>Dez</td>
          <td>Gesamt</td>
          </tr>
          
          <tr valign="top">
          <td class="name">Meiley</td>
          <td><span class="ok jan"></span></td>
          <td><span class="ok feb"></span></td>
          <td><span class="ok mar"></span></td>
          <td><span class="ok apr"></span></td>
          <td><span class="ok mai"></span></td>
          <td><span class="ok jun"></span></td>
          <td><span class="ok jul"></span></td>
          <td><span class="ok aug"></span></td>
          <td><span class="ok sep"></span></td>
          <td><span class="ok okt"></span></td>
          <td><span class="ok nov"></span></td>
          <td><span class="ok dez"></span></td>
          <td class="gesamt">7.000</td>
          </tr>
          
          <tr valign="top">
          <td class="name">Petra Silia</td>
          <td><span class="ok jan"></span></td>
          <td><span class="ok feb"></span></td>
          <td><span class="ok mar"></span></td>
          <td><span class="ok apr"></span></td>
          <td><span class="ok mai"></span></td>
          <td><span class="ok jun"></span></td>
          <td><span class="ok jul"></span></td>
          <td><span class="ok aug"></span></td>
          <td><span class="ok sep"></span></td>
          <td><span class="ok okt"></span></td>
          <td><span class="ok nov"></span></td>
          <td><span class="ok dez"></span></td>
          <td>6.404</td>
          </tr>
          
          <tr valign="top">
          <td class="name">ronja</td>
          <td><span class="ok jan"></span></td>
          <td><span class="ok feb"></span></td>
          <td><span class="ok mar"></span></td>
          <td><span class="ok apr"></span></td>
          <td><span class="ok mai"></span></td>
          <td><span class="ok jun"></span></td>
          <td><span class="ok jul"></span></td>
          <td><span class="ok aug"></span></td>
          <td><span class="ok sep"></span></td>
          <td><span class="ok okt"></span></td>
          <td><span class="ok nov"></span></td>
          <td><span class="ok dez"></span></td>
          <td>5.075</td>
          </tr>
          
          <tr valign="top">
          <td class="name">casasigi</td>
          <td><span class="ok jan"></span></td>
          <td><span class="ok feb"></span></td>
          <td><span class="ok mar"></span></td>
          <td><span class="ok apr"></span></td>
          <td><span class="ok mai"></span></td>
          <td><span class="ok jun"></span></td>
          <td><span class="ok jul"></span></td>
          <td><span class="ok aug"></span></td>
          <td><span class="ok sep"></span></td>
          <td><span class="ok okt"></span></td>
          <td><span class="ok nov"></span></td>
          <td><span class="ok dez"></span></td>
          <td>4.549</td>
          </tr>
          
          <tr valign="top">
          <td class="name">wolfen</td>
          <td><span class="ok jan"></span></td>
          <td><span class="ok feb"></span></td>
          <td><span class="ok mar"></span></td>
          <td><span class="ok apr"></span></td>
          <td><span class="ok mai"></span></td>
          <td><span class="ok jun"></span></td>
          <td><span class="ok jul"></span></td>
          <td><span class="ok aug"></span></td>
          <td><span class="ok sep"></span></td>
          <td><span class="ok okt"></span></td>
          <td><span class="ok nov"></span></td>
          <td><span class="ok dez"></span></td>
          <td>3.022</td>
          </tr>
          
          </table>
          PHP-Code:
          // aktuelle Liste
          foreach( file"update.txt" ) as $v ) {
             
          $d explode"|"$v );
                  
            foreach (
          $d as $element) { //gibt jeden wert in einzelne zeile aus
              
          echo $element "<br>";
            }

          update.txt beinhaltet nur:
          Name|wert (siehe oben)

          Kommentar


          • #6
            Hallo,

            um das in die Tabelle einzubauen, musst du dich mit DOM-Manipulation
            auseinandersetzen. Dafür empfehle ich (geht aber auch so), die Tabelle als XHTML Strict auszuzeichnen, statt dich mit irgendwelchem Transitional-Kram mit viel zu viel Layout-Angaben rumzuärgern.

            Gruß,

            Amica
            Zuletzt geändert von AmicaNoctis; 30.08.2010, 18:01.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              und daneben würde ich sowohl die Datei als auch die Tabelle mit einer Schleife bauen, weil das einfach eleganter und viel leichter zu erweitern ist, falls da auf ein schlag plötzlich mal die 3fache Anzahl Personen / Daten zu verarbeiten ist

              die Ausgabe der HTML-Tags + Texte übernimmt dann normalerweise auch dein php-script .. also im normalfall sieht das so ähnlich aus

              PHP-Code:
              ...//hier Ausgabe Tabellenkopf
              for($i=0;$i<$maxPerson;$i++) {
                 echo 
              '<tr>';
                 echo 
              '<td>'.$name[$i].'</td>';
                 for (
              $j=0;$j<$anzMonate;$j++) {
                    echo 
              '<td>'.$daten[$i][$j].'</td>';
                 }
                 echo 
              '</tr>';
              }
              echo 
              '</table>';
              ...
              // weiter 
              alles was du nun noch bräuchtest wäre im Prinzip die Namen in einem array $name[] , die Daten der Personen in einem 2-Dimensionalen Array $daten[][] - der erste Index entspricht der Person (Name) der 2te dem Monat ...) und die jeweiligen obergrenzen ...
              wenn die Ausgabe auch die Leeren Spalten für restlichen Monate enthalten soll , fügst du einfch nach der for($j - Schleife
              noch folgendes ein
              PHP-Code:
              for($j=12;$j>$anzMonate;$j--)
                 echo 
              '<td>&nbsp;</td>'
              .
              Zuletzt geändert von eagle275; 30.08.2010, 18:35.
              [font=Verdana]
              Wer LESEN kann, ist klar im Vorteil!
              [/font]

              Kommentar


              • #8
                Hallo,

                Danke für eure Hinweise. Ich gehe auf mein Problem nun etwas intensiver ein, da ich schon den ganzen Tag versuche das irgendwie hinzubiegen.

                Das ganze handelt sich um ein Browserspiel, in der Werte als .txt Datei zur Verfügung stehen. Diese Werte möchte ich in einem Array "$user" einlesen um damit arbeiten zu können (eine Tabelle zu erstellen).

                txt:
                [COLOR=SeaGreen]lieferung.txt[/COLOR] (http://my-media.eu/script/lieferung.txt)
                -> beinhaltet: Name | BisherGeliefert
                [COLOR=SeaGreen]stats.txt[/COLOR] (http://my-media.eu/script/stats.txt)
                -> -> beinhaltet: Nr | Name | Rang | Punkte

                Am besten wäre es, wenn man die 2 Dateien zusammenführen könnte, sodass "BisherGeliefert" jeweils am ende jeder Zeile (passend/abgeglichen zum Namen) in der stats.txt hinzugefügt wird.
                Oder das ganze könnte, wenn möglich, natürlich auch nachträglich im Array hinzugefügt werden.

                Hier sind meine PHP Schnipsel:
                PHP-Code:
                $user = array();

                // $u[1] = Name, $u[2] = Rang
                foreach( file"stats.txt" ) as $v ) {
                    
                $u explode"|"$v );
                    
                $u str_replace(' ','',$u); // Leerzeichen entfernen

                    
                $user[] = array("Name"=>"$u[1]",
                                    
                "Rang"=>"$u[2]");
                }

                // $update[0] = Name, $update[1] = Gesamtmenge
                foreach( file"lieferung.txt" ) as $v ) {
                    
                $update explode"|"$v );
                    
                $user[] = array("Gesamtmenge"=>"$update[1]");
                    
                // soll eigentlich passend zu jeden NAMEN $u[1] hinzugefügt werden

                Weiter bin ich leider nicht gekommen, alles was ich eigentlich benötige ist ein Array wie folgt:
                PHP-Code:
                $user[] = array("Name"=>"Alfred",
                                
                "Rang"=>"Rosenkavalier");
                                
                "Gesamtmenge"=>"7.000");
                                
                "Punkte"=>"100.000"); 
                Vielleicht versteht ihr mein anliegen etwas besser und kluge Köpfe können mir vllt. den einen oder anderen Denkanstoß geben

                liebe Grüße
                McKay

                werd nun erst einmal schlafen gehen, gute Nacht
                Zuletzt geändert von mckay; 31.08.2010, 10:36.

                Kommentar


                • #9
                  Als erstes gewöhn dir das bitte ab:
                  Zitat von mckay Beitrag anzeigen
                  PHP-Code:
                  "$u[1]"
                  "
                  $u[2]"
                  "
                  $update[1]
                  Erstens hat es keinen Sinn, Variablennamen in Strings zu schreiben, wenn sie dessen einziger Inhalt sind und zweitens ist es schlechter Stil.

                  Zu deinem Problem:

                  Ich würde mit list() arbeiten, denn sprechende Namen sind immer besser nachzuvollziehen als irgendwelche Array-Indizes:

                  PHP-Code:
                  list($nr$name$rang$punkte) = explode("|"$zeile); 
                  Dein User-Array kannst du assoziativ aufbauen und damit ganz einfach die Zuordnung zwischen den beiden Datenquellen anhand des Namens abbilden:

                  PHP-Code:
                  $user[$name] = array(...); // anlegen nur in der ersten Schleife 
                  Wenn du das in der zweiten Schleife auch machst, überschreibst du es dir, deswegen musst du dort die einzelnen Infos einzeln hinzufügen:

                  PHP-Code:
                  $user[$name]["Gesamtmenge"] = ...; // hinzufügen in jeder weiteren Schleife 
                  Gruß,

                  Amica
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Hi Amica,

                    danke für die Hinweise.
                    Ich würde natürlich gern sauber und optimiert arbeiten, aber ich kenn nicht den korrekten Aufbau der Schleifen. Sind für mich noch spansiche Dörfer, aber ich bemühe mich.

                    Ich habe nun versucht list() einzusetzen, bekomme aber keinen Wert ausgegeben
                    PHP-Code:
                    $zeile file("stats.txt");
                    list(
                    $nr$name$rang$punkte) = explode("|"$zeile);  
                    var_dump($name); 
                    Mir leuchtet auch noch nicht ein wo ich ein foreach setzen sollte und wie ich das Script effektiv aufbaue :/

                    Kommentar


                    • #11
                      Zitat von mckay Beitrag anzeigen
                      Ich habe nun versucht list() einzusetzen, bekomme aber keinen Wert ausgegeben
                      Mit list() wird auch nichts ausgegeben, sondern nur in Variablen geschrieben. Sieh dir die vielen Beispiele im Handbuch an.

                      Zitat von mckay Beitrag anzeigen
                      Mir leuchtet auch noch nicht ein wo ich ein foreach setzen sollte und wie ich das Script effektiv aufbaue :/
                      Das hattest du doch im Prinzip schon alles. Warum hast du dich so weit davon entfernt?

                      PHP-Code:
                      $user = array();

                      foreach (
                      file("stats.txt") as $zeile) {
                          
                      $zeile str_replace(" """$zeile);
                          list(
                      $nr$name$rang$punkte) = explode("|"$zeile);
                          
                      $user[$name] = array(
                              
                      "Name"   => $name,
                              
                      "Nr"     => $nr,
                              
                      "Rang"   => $rang,
                              
                      "Punkte" => $punkte
                          
                      );
                      }

                      foreach (
                      file("lieferung.txt") as $zeile) {
                          list(
                      $name$gesamtmenge) = explode("|"$zeile);
                          
                      $user[$name]["Gesamtmenge"] = $gesamtmenge;

                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar

                      Lädt...
                      X