datei erstellen nach bestimmter anzahl zeilen

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

  • datei erstellen nach bestimmter anzahl zeilen

    hallo,


    ich habe ein Formular von welchem aus alle einträge in eine datei geschrieben werden, mit einem zeilenbruch als ende

    wenn in der datei eine bestimmte anzahl von zeilen,
    zum beispiel 5 zeilen, erkannt wird
    soll eine neue datei erstellt werden in welcher dann wieder
    nur 5 zeilen gespeichert werden können

    die namen der dateien sollten mit einer fortlaufenden nummer
    gespeichert werden, also zum beispiel 001_adressen.txt


    also es müsste immer die letzte datei auf zeilenlänge überprüft werden
    bei erreichen der zeilenanzahl muss eine neue datei
    erstellt werden und in diese gespeichert werden


    kann mir mit diesem problem jemand helfen


    vielen dank

    foxy_hdk

  • #2
    zeig mal was du bisher gemacht hast.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      so sieht die datenübergabe in die datei aus

      also daten aus einem forumular in datei speichern


      PHP-Code:

      $fp 
      fopen('speichern.csv''a');
      if (
      $fp)
      {
      fputs($fp$vorname .";" .$nachname .";" .$mail .";" .$strasse .";" 
            
      .$plz .";" .$ort .";" .$angabe1 .";".$angabe2 .";" ."\n");
            
      fclose($fp);

      Kommentar


      • #4
        und weiter hast du nichts?
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          was speziell für die dateiübergabe gibt nicht


          ich habe nur noch die ermittlung der zeilen
          aber nach bestimmten zeilen ne neue datei
          mit fortlaufender nummer erstellen
          da weiss ich nicht weiter




          PHP-Code:

          if (file_exists("speichern.csv")) 
          {
              
          $cont file("speichern.csv");
              
          $anzahl count($cont);
          /*    echo $anzahl;  */
          } else {

          /*       print "existiert nicht";  */

          Kommentar


          • #6
            okay... dann wollen wir mal...

            zunächst mal haben wir zwei möglichkeiten, um herauszukriegen, welches überhaupt die letzte datei ist.

            zum einen können wir uns direkt den inhalt des ordners ansehen, in dem die dateien liegen (kann eventuell bei sehr vielen dateien nicht mehr ganz so performant sein.) oder wir erzeugen eine zusätzliche datei, in der wir uns einfach die letzte nummer merken (evtl. auch die bereits eingefügten zeilen, das muss man selbst entscheiden.)

            im groben sieht das dann so aus

            PHP-Code:

            $referenzfile
            =fopen('zaehler.txt','r');
            $dateinummer=trim(fread($referenzfile));
            fclose($referenzfile);

            $zeilenzahl=//hole dir irgendwie die anzahl der zeilen von $dateinummer.'_adressen.txt';

            if ($zeilenzahl==5) {
              
            $dateinummer++;
              
            $zeilenzahl=1;
            } else 
            $zeilenzahl++;

            $fp=fopen($dateinummer."_adressen.txt",($zeilenzahl=="w+" "a"));

            //hier steht jetzt dein originalcode
            if ($fp)
            {
            fputs($fp$vorname .";" .$nachname .";" .$mail .";" .$strasse .";" 
                  
            .$plz .";" .$ort .";" .$angabe1 .";".$angabe2 .";" ."\n");
                  
            fclose($fp);
            }

            //nun noch refrenz neu schreiben
            $referenzfile=fopen('zaehler.txt','w+');
            fputs($referenzfile,$dateinummer);
            fclose($referenzfile); 
            oder so ähnlich.. ist bestimmt nicht die eleganteste möglichkeit, aber es sollte funktionieren..


            greetz, high
            Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
            When everything else fails, manipulate the data...
            Beschriftungen / Großformatdruck / Werbemittel

            Kommentar


            • #7
              es kommt folgende fehlermeldung

              Warning: Wrong parameter count for fread()

              in der 2. zeile nachfolgenden codes

              PHP-Code:
              $referenzfile=fopen('zaehler','r');
              $dateinummer=trim(fread($referenzfile));
              fclose($referenzfile); 

              er legt keine dateinummer fest
              diese variable bleibt immer leer

              demzufolge bleibt auch die zähler-datei immer leer



              so ist jetzt der code:

              PHP-Code:
              $referenzfile=fopen('zaehler','r');
              $dateinummer=trim(fread($referenzfile));
              fclose($referenzfile);


              $file $dateinummer.'_adressen.txt';
              $zeilenzahlcount($file);


              if (
              $zeilenzahl==5) {
                
              $dateinummer++;
                
              $zeilenzahl=1;
              } else 
              $zeilenzahl++;

              $fp=fopen($dateinummer."_adressen.txt",($zeilenzahl=="w+" "a"));


              if (
              $fp)
              {
              fputs($fp$vorname .";" .$nachname .";" .$mail .";" .$strasse .";" 
                    
              .$plz .";" .$ort .";" .$angabe1 .";".$angabe2 .";" ."\n");
                    
              fclose($fp);
              }


              $referenzfile=fopen('zaehler','w+');
              fputs($referenzfile,$dateinummer);
              fclose($referenzfile); 
              Zuletzt geändert von foxy_hdk; 08.07.2006, 00:56.

              Kommentar


              • #8
                jetzt hab ichs hinbekommen

                so sieht jetzt der code aus

                PHP-Code:
                $referenzfile=fopen('zaehler','r');
                $dateinummer=trim(fread($referenzfile,filesize($dateinummer.'_adressen.txt')));
                fclose($referenzfile);

                $zeilenzahl count(file($dateinummer.'_adressen.txt'));


                if (
                $zeilenzahl==5
                {
                  
                $dateinummer++;
                }


                $fp=fopen($dateinummer."_adressen.txt","a");

                if (
                $fp)
                {
                fputs($fp$vorname .";" .$nachname .";" .$mail .";" .$strasse .";" 
                      
                .$plz .";" .$ort .";" .$angabe1 .";".$angabe2 .";" ."\n");
                      
                fclose($fp);
                }
                    

                $referenzfile=fopen('zaehler','w+');
                fputs($referenzfile,$dateinummer);
                fclose($referenzfile); 

                Kommentar


                • #9
                  das schreiben der daten funktioniert jetzt bestens


                  um nun doppeleinträge zu verhindern
                  möchte ich die dateien einlesen und
                  mit der aktuellen email-adresse vergleichen

                  wenn die email schon vorhanden ist soll
                  eine fehlermeldung erscheinen
                  Zuletzt geändert von foxy_hdk; 08.07.2006, 12:02.

                  Kommentar


                  • #10
                    Re: datei erstellen nach bestimmter anzahl zeilen

                    PHP-Code:
                    <?php
                    // maximale Anzahl Zeilen in einer Datei
                    $max_lines 5;

                    // Muster der Dateinamen, ? als Platzhalter für fortlaufende Nummer
                    $pattern './formdata_?.log';

                    // Liste der existierenden Dateien
                    $files glob(str_replace('?''*'$pattern));
                    // wenn es noch gar keine Datei gibt ...
                    if (!is_array($files)) {
                        
                    // eine neue erzeugen (Email kann noch nicht vorhanden sein)
                        
                    file_put_contents(str_replace('?''0'$pattern), $_GET);
                    // wenn es schon Dateien gibt
                    } else {
                        
                    // jede Datei ...
                        
                    foreach ($files as $f) {
                            
                    // lesen und wenn Email vorkommt
                            
                    if (strpos(file_get_contents($f), $_GET['email']) !== false) {
                                
                    // Fehlermeldung erzeugen
                                
                    $err 'Email schon eingetragen';
                                
                    // Schleife abbrechen
                                
                    break;
                            }
                        }
                        
                    // wenn eine Fehlermeldung gesetzt ist
                        
                    if (isset($err)) {
                            
                    // Fehlermeldung ausgeben
                            
                    echo $err;
                        
                    // wenn keine Fehlermeldung gesetzt ist
                        
                    } else {
                            
                    // die letzte Datei lesen
                            
                    $lastfile file(end($files));
                            
                    // wenn diese noch nicht die maximale Zeilenzahl hat
                            
                    if (count($lastfile) < $max_lines) {
                                
                    // neue Zeile anhängen
                                
                    $lastfile[] = implode(''$_GET)."\n";
                                
                    // und Dateiinhalt zurückschreiben
                                
                    file_put_contents(end($files), $lastfile);
                            
                    // wenn die letzte Datei schon voll ist
                            
                    } else {
                                
                    // neue Datei erzeugen
                                
                    file_put_contents(str_replace('?'count($files), $pattern), $_GET);
                            }
                        }
                    }
                    ?>
                    Nur so als Konzept, völlig ungetestet und ohne Kaffee im Blut geschrieben.

                    Kommentar


                    • #11



                      ich habe leider keinen blassen dunst wie ich das in mein skript integrieren kann

                      du hast zwar alles schön dokumentiert, aber wie ich daraus ein funktionierendes skript machen kann das übersteigt meine zaghaften php-gehversuche


                      hier mein code:

                      PHP-Code:
                      <?
                      /*Variablen umwandeln*/


                      $vorname =      $_POST['vorname'];
                      $nachname =     $_POST['nachname'];
                      $mail =         $_POST['mail'];
                      $strasse =      $_POST['strasse'];
                      $plz =          $_POST['plz'];
                      $ort =          $_POST['ort'];
                      $angabe1 =      $_POST['angabe1'];
                      $angabe2 =      $_POST['angabe2'];



                      /*+++++++++++++++++++++++++++++*/
                      /* anzahl der Zeilen pro Datei */

                      $anzahl_zeilen = 5;

                      /*+++++++++++++++++++++++++++++*/



                      /************************************************/
                      /*wenn email richtig dann speichern in datei*/
                      /************************************************/

                      if ($mail!="" && ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $mail))
                      {

                      $zaehler = "./data/zaehler";
                      $fh = @fopen ($zaehler, "r");
                      if ($fh) {

                          if (filesize($zaehler)=="")
                          {
                          $dateinummer = 0;
                          @fclose ($fh);
                          }
                          elseif (filesize($zaehler)>"")
                          {
                          $dateinummer = trim (fread ($fh, filesize($zaehler))); 
                          @fclose ($fh);
                          }
                      }
                      elseif (!$fh)
                      {
                          $dateinummer = 0;
                      }

                      if ($dateinummer < 10)
                      {
                      $fp=fopen("./data/00".$dateinummer."_adressen.csv","a");
                      $file_adressen = ("./data/00".$dateinummer."_adressen.csv");
                      }
                      elseif ($dateinummer < 99 && $dateinummer >9)
                      {
                      $fp=fopen("./data/0" .$dateinummer."_adressen.csv","a");
                      $file_adressen = ("./data/0" .$dateinummer. "_adressen.csv");
                      }
                      elseif ($dateinummer > 99)
                      {
                      $fp=fopen("./data/" .$dateinummer."_adressen.csv","a");
                      $file_adressen = ("./data/" .$dateinummer."_adressen.csv");
                      }
                        if ($fp)
                        {
                          fputs($fp, $vorname .";" .$nachname .";" .$mail .";" .$strasse .";" 
                            .$plz .";" .$ort .";" .$angabe1 .";".$angabe2 .";" ."\n");
                            fclose($fp);
                          $zeilenzahl = count(file($file_adressen));
                          /*
                          echo "zeilenzahl: ".$zeilenzahl .\n;
                          echo "dateinummer: ".$dateinummer .\n;

                          */
                          $anzahl_teilnehmer = (" Anzahl bisher eingetragener Teilnehmer: " .($dateinummer*5 + $zeilenzahl));
                          /* echo $anzahl_teilnehmer; */

                          $timestamp = time();
                          $datum = date("d.m.Y - H:i",$timestamp);
                          $fp=fopen("./data/anzahl_eintragungen.txt","w+");
                          fputs($fp, "\n Letzter erfolgreicher Eintrag: " .$datum ." Uhr" ."\n" .$anzahl_teilnehmer);
                               fclose($fp);

                            if ($zeilenzahl==$anzahl_zeilen) 
                            {
                                $dateinummer++;
                            }
                        }
                          echo "<font color=\"#CC0066\"><h3>";
                          echo "<h2>Vielen Dank für die Teilnahme an unserem Gewinnspiel.</h2>";
                          echo '<br /><br /><a href="javascript:history.back()">zurück</a>';
                          /*echo '<br /><br /><a href="./data/anzahl_eintragungen.txt">Anzahl Teilnehmer</a>';*/
                          echo "</font></h3>";
                        }
                        else
                        {
                          echo "<font color=\"#CC0066\"><h3>";
                          echo "<h2>Bitte korrigieren sie ihre Email-Adresse<br /></h2>";
                          echo '<br /><br /><a href="javascript:history.back()">zurück</a>';
                          echo "</font></h3>";
                        }

                      $referenzfile=fopen($zaehler,'w+');
                      fputs($referenzfile,$dateinummer);
                      fclose($referenzfile);


                      ?>
                      Zuletzt geändert von foxy_hdk; 09.07.2006, 20:33.

                      Kommentar


                      • #12
                        kann mir jemand erklären wie ich das konzept
                        von onemorenerd
                        umsetzen kann


                        vielen dank

                        Kommentar


                        • #13
                          kann mir jemand erklären wie ich das konzept
                          von onemorenerd so in meinen code
                          integrieren kann das es funktioniert ?



                          vielen dank

                          Kommentar


                          • #14
                            Nimm es doch erstmal so wie es ist, speichere es als eigenständige Datei und rufe sie so lange im Browser auf, bis ein Fehler eintritt.
                            Die Aufrufe sollten mit irgendwelchen GET-Parametern (alles nach dem ?, siehe jetzige Adresszeile deines Browsers) erfolgen.
                            Sollte sich nach ein paar Aufrufen noch kein Fehler gezeigt haben (was mich sehr wundern würde), schau nach, ob die Dateien geschrieben wurden und was sie enthalten.
                            Spätestens jetzt haut sicher irgendwas nicht hin.
                            Was? Ausführliche Beschreibung bitte.

                            Kommentar


                            • #15
                              grummel


                              ich kann mit deinem skript leider nix anfangen


                              also ich habe ein html - formular
                              aus welchem ich per Post, daten direkt in
                              dateien speichere

                              unter anderem auch jeweils eine email-adresse

                              nun möchte ich gerne das die schon vorhandenen dateien
                              durchsucht werden und mit der aktuellen email verglichen werden


                              mein schon vorhandenes skript habe ich weiter oben schon gepostet


                              die einzelnen strings sind mit ; getrennt

                              also so zum beispiel:
                              Klaus;Müller;mueller@web.de;Müllerstr. 25;00000;Müllerstadt;test1;test2;

                              die dateien sind fortlaufend nummeriert in der form:
                              000_adressen.csv
                              001_adressen.csv




                              bevor also die daten in eine datei geschrieben werden,
                              sollen die dateien nach der email-adresse durchsucht werden


                              vielen dank für eure mühen

                              Zuletzt geändert von foxy_hdk; 17.07.2006, 20:29.

                              Kommentar

                              Lädt...
                              X