Ankündigung

Einklappen
Keine Ankündigung bisher.

Schleifenoutput in datei Speichern

Einklappen

Neue Werbung 2019

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

  • Schleifenoutput in datei Speichern

    Hi leute,

    Habe mir ein script geschrieben, dass mir eine CSV datei aufbereitet.
    jetzt möchte ich das aufbereitete in eine datei schreiben.
    Habe es schon mal mit "ob_start(), ob_get_contents(); " etc versucht. hat aber nicht hingehauen. Hier ein auszug des scripts:

    PHP-Code:

    $row 
    1;                                   
        
    $handle fopen ("export.csv","r");    
        
               
            while ( (
    $data fgetcsv ($handle1000";")) !== FALSE ) { 
                                                   
              
    $num count ($data);                     
                                                                                   
                                                 
                for (
    $c=0$c $num$c++) {              
                    print 
    $data[$c].";";   
                  
                }

                if (
    $num == '21') {
                    
                    echo 
    "<br>\n";             
                } 
                
          } 
    Ich will quasi so wie ich es auf den Bildschirm sehe den Inhalt in eine datei schreiben.

    grüße

  • #2
    Dafür brauchst du doch keinen Output-Buffer oder übersehe ich was? Es würde hier doch vollkommen reichen wenn du print und echo durch file_put_contents ersetzt oder nicht?

    Kommentar


    • #3
      Wenn du aus der csv-Datei eine neue csv-Datei erstellen willst, kannst du sie auch gleich kopieren.
      Gruss
      L

      Kommentar


      • #4
        @ cycap wie muss das dann genau ausschauen?

        habe mal anstat des print "file_put_contents" gesetzt:

        PHP-Code:
            file_put_contents($file,$data[$c].";"); 
        aber irgendwie funktioniert das nicht ganz. in der datei befindet sich nur ung. 10 zeichen?!

        Kommentar


        • #5
          Vermutlich die letzten Daten? file_put_contents überschreibt standardmäßig bei jedem Aufruf alles was in der Datei steht. Du musst FILE_APPEND als zweiten Parameter übergeben damit er Daten anhängt statt diese zu überschreiben:

          PHP-Code:
          file_put_contents($file,$data[$c].";",FILE_APPEND); 

          Kommentar


          • #6
            Okey jetzt hat es funktioniert.
            Jetzt hab ich allerdings wieder die gleiche formatierung wie wenn ich die alte csv datei in einer txt datei öffne. hmm an was kann das liegen?

            das problem ist, das der csv export so aus sieht:

            zeit;name;bla;
            bla1;usw
            test;irgendwas;

            so jetzt ist aber zeit - usw ein datensatz. wenn ich das so in eine tabelle importiere,dann macht er mir für jede neue zeile einen datensatz. desswegen will ich mir die csv datei so aufbereiten, dass er die gewünschten datensätze in eine zeile schreibt.

            Kommentar


            • #7
              Das altbekannte "Problem" was du hast liegt darin das du auch die Zeilenumbrüche ausliest. In deiner HTML-Ausgabe siehst du die natürlich nicht, weil die ja kein HTML sind. Zeilenumbrüche am Ende einer Variable kannst du zum Beispiel mit trim() entfernen.

              Kommentar


              • #8
                am also muss ich die neu erstellte datei dann wieder einlesen und dann mittels trim() die zeilenumbrüche weg machen oder kann ich das auch irgendwie so noch einbauen bevor er mir die datei schreibt?

                Kommentar


                • #9
                  Mit fgetcsv() werden normalerweise keine Zeilenumbrüche eingelesen.
                  Ok, aber ich glaube, jetzt verstehe ich, du willst immer 21 Felder pro Zeile ausgeben. Da würde ich aber nicht file_put_contents() verwenden, sondern normale fwrite(), bzw fprintf()-Funktionen.
                  PHP-Code:
                  $handle fopen ("export.csv","r");  
                  $out fopen($file'w'); 

                  $cnt 0;    
                  $outdat = array();                         
                  while (
                  $data fgetcsv ($handle1000";")){    
                      for (
                  $c=0$c $num$c++) {              
                          
                  $outdat[] = $data[$c];   
                          
                  $cnt ++;
                          if(
                  $cnt == 21){
                              
                  fprintf($out"%s\n"implode(';'$outdat));    
                              
                  $outdat = array();
                              
                  $cnt 0;
                          }
                      }      

                  fprintf($out"%s\n"implode(';'$outdat)); // Letzte Zeile
                  fclose($out);
                  fclose($handle); 
                  Gruss
                  L

                  Kommentar


                  • #10
                    @lazydog wenn ich das script so ausführe bekomme ich diese fehler:


                    PHP-Code:
                    Warning:  fprintf(): supplied argument is not a valid stream resource in C:\xampp\htdocs\1.php on line 19

                    Warning
                    :  fclose(): supplied argument is not a valid stream resource in C:\xampp\htdocs\1.php on line 20 
                    Zeile: 19 fprintf($out, "%s\n", implode(';', $outdat)); // Letzte Zeile
                    Zeile: 20 fclose($out);

                    Kommentar


                    • #11
                      das liegt wohl daran das $file leer ist... in der zweiten zeile...

                      aber lazy, jetzt erklär mir doch mal warum man nicht file_put_contents nehmen sollte?

                      Kommentar


                      • #12
                        Zitat von cycap Beitrag anzeigen
                        das liegt wohl daran das $file leer ist... in der zweiten zeile...

                        was meinst du damit?

                        Kommentar


                        • #13
                          Das:

                          PHP-Code:
                          $out fopen($file'w'); 
                          $file ist leer, da sollte ein Dateiname drin stehen in den du speichern willst...

                          Kommentar


                          • #14
                            Zitat von cycap Beitrag anzeigen
                            aber lazy, jetzt erklär mir doch mal warum man nicht file_put_contents nehmen sollte?
                            Weil file_put_contents () bei jedem Aufruf das File öffnet, schreibt, und dann wieder schliesst.
                            This function is identical to calling fopen(), fwrite() and fclose() successively to write data to a file.
                            Gruss
                            L

                            Kommentar


                            • #15
                              in der output datei steht dann ein zeichen drin..das wohl ein zeilenumbruch sein soll. zumindest wenn ich es kopiere und wo einfüge macht es mir einen zeilenumbruch.. was kann schief gegangen sein=?

                              Kommentar

                              Lädt...
                              X