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

  • thecracked
    hat ein Thema erstellt Schleifenoutput in datei Speichern.

    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

  • cycap
    antwortet
    Das macht die Sache etwas komplizierter und ich ehrlich gesagt auch keine Lust mehr dir alles vor zu programmieren, du kannst auch mal selber was machen. Wie du siehst enthalten die Felder die mit " " umschlossen sind auch Zeilenumbrüche und diese werden ja von mir mit ; ersetzt. Dann setz dich hin, versteh meinen Code und baue ihn so um das er Felder mit " " anders behandelt. Falls konkrete Probleme auftreten frag das Manual oder melde dich wieder.

    Einen Kommentar schreiben:


  • thecracked
    antwortet
    okey..
    jetzt hat es hin gehauen.. nur das nächste problem ist scho da
    es werden zu viele sachen rausgeschmissen.. jetzt stimmt der import nicht mehr..bzw es werden ";" entfernt obwohl dich gar nicht entfernt werden sollten..

    hier ein auszug aud der export.csv


    PHP-Code:

    Typ
    ;Kontakt;Telefon/E-Mail;Kategorie;Priorität;Besitzer;Zugriff;Status;Erledigt;Erledigt am;Ort;Startdatum;Fällig am;verantwortlich;Titel;Beschreibung;geplante Zeit;benötigte Zeit;pricelist;Preis;info_datemodified
    task
    ;;;IT;1;user;public;ongoing;90;0;;2008/05/20 16:49;0;;LDAP Outlook EMail Client Adressbuch;"Adressbuch für die zentrale Pflege des E-Mailadressbuches Intern

    20080618: LDAP Adressbuch ist so weit testweise Eingerichtet. Siehe E-Mail
    "
    ;0;0;;;2008/06/18 15:42
    task
    ;;;IT;1;user;public;not-started;0;0;;2008/06/17 12:37;0;user;KVM Kabel blabla;"Sind die Kabel schon wieder bei uns eingetroffen

    Bitte prüfen

    bla

    20080618: Kabel sind noch beim Hersteller. askdfdsf kann es noch ein weile dauern"
    ;0;0;;;2008/06/18 15:40 
    Nach dem "E-Mailadressbuches Intern" stimmt es dann nicht mehr.



    Ergebnis:

    PHP-Code:

    Typ
    task
    Kontakt

    Telefon_Email
    KategorieIT
    Prioritaet
    1
    Besitzer
    user
    Zugriff
    : public
    Statusongoing
    Erledigt
    90
    Erledigt_am
    0
    Ort

    Startdatum2008/05/20 16:49
    Faellig_am
    0
    verantwortlich

    TitelLDAP Outlook EMail Client Adressbuch
    Beschreibung
    "Adressbuch für die zentrale Pflege des E-Mailadressbuches Intern
    geplante_zeit: 0
    benoetigte_zeit: 20080618
    pricelist: "
    Preis0
    info_datemodified
    0

    Typ

    Kontakt2008/06/18 15:42
    Telefon_Email
    task
    Kategorie

    Prioritaet
    BesitzerIT
    Zugriff
    1
    Status
    user
    Erledigt
    0
    Erledigt_am
    not-started
    Ort
    0
    Startdatum
    0
    Faellig_am

    verantwortlich2008/06/17
    Titel
    0
    Beschreibung
    user
    geplante_zeit
    0
    benoetigte_zeit
    0
    pricelist

    PreisBitte prüf
    info_datemodified

    hoffe das hilft weiter

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Ok, letzter Versuch, wenn das auch nicht klappt dann musst du die besagste Datei mal irgendwo hochladen und nen Link hier reinstellen.

    PHP-Code:
    $input file_get_contents("export.csv");
    $search = array("\r\n","\n","\r");
    $replace = array(';',';',';');
    $input str_replace($search,$replace,$input);
    $werte explode(";",$input);
    $werte array_map("trim",$werte);
    $i 0;
    $output '';
    foreach(
    $werte as $wert)
    {
      
    $i++;
      if(
    $i == 21){
        
    $output .= "\n";
        
    $i=0;
      }
      
    $output .= $wert.';';
    }
    file_put_contents("export2.csv",$output); 

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Zitat von thecracked Beitrag anzeigen
    die csv datei ist aber nicht leer
    Dann zeige sie mal (mindestens auszugsweise).

    Einen Kommentar schreiben:


  • thecracked
    antwortet
    @ cycap script funktioniert so weit, nur werden mir immer noch nicht die zeilenumbrüche entfernt. export2.csv hat die gleiche vormatierung wie export1.csv..


    @ lazydog die csv datei ist aber nicht leer


    jemand noch ne idee?!


    grüße

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Zitat von thecracked
    was kann schief gegangen sein
    Dann ist dein export.csv leer und nur der Zeilenumbruch der letzten (natürlich auch nicht vorhandenen) Zeile wird geschrieben.

    @cycap
    Wenn du beim explode() neben dem Semikolon auch noch den Zeilenumbruch entsprechend berücksichtigst, geht das auch

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Ok, ist klar. Nun wie wärs damit:

    PHP-Code:
    $input file_get_contents("export.csv");
    $werte explode(";",$input);
    $werte array_map("trim",$werte);
    $i 0;
    $output '';
    foreach(
    $werte as $wert)
    {
      
    $i++;
      if(
    $i == 21){
        
    $output .= "\n";
        
    $i=0;
      }
      
    $output .= $wert.';';
    }
    file_put_contents("export2.csv",$output); 

    Einen Kommentar schreiben:


  • thecracked
    antwortet
    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=?

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    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.

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Das:

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

    Einen Kommentar schreiben:


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

    was meinst du damit?

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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?

    Einen Kommentar schreiben:


  • thecracked
    antwortet
    @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);

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    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); 

    Einen Kommentar schreiben:

Lädt...
X