Ankündigung

Einklappen
Keine Ankündigung bisher.

csv auslesen, abändern und wieder speichern

Einklappen

Neue Werbung 2019

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

  • csv auslesen, abändern und wieder speichern

    Hallo zusammen,
    ich habe ein Problem, bei dem ich absolut nicht weiterkomme, obwohl ich denke, dass es eigentlich total einfach ist.

    Ich möchte mit Word einen Serienbrief erstellen. Dazu benötige ich natürlich die Daten der Anschrift in einer Tabellenform.

    Aus einer webbasierten Anwendung kann ich mir eine Adressenliste als csv ausgeben lassen.

    Ich glaube aber, dass es eine normale Textdatei ist...
    Sie ist wie folgt aufgebaut:

    Code:
    Name 1
    Straße 1
    Ort 1
    Name 2
    Straße 2
    Ort 2
    Name 3
    Straße 3
    Ort 3
    Also jeder einzelne Wert ist durch ein Zeilenumbruch getrennt. Es ist aber kein Trennzeichen vorhanden.

    Damit kann ich erstmal nichts anfangen. Nun war meine Idee den Inhalt so abzuändern, dass Word die einzelnen, zusammenhängenden Datensätze erkennt.

    Meine "Wunsch csv" würde dann wie folgt aussehen:

    Code:
    Name 1; Straße 1;Ort 1
    Name 2; Straße 2;Ort 2
    Name 3; Straße 3;Ort 3
    Ich bin schon ewig am rumprobieren, aber komme einfach nicht zum Ziel. Wäre super, wenn jemand helfen kann.

    Folgendes habe ich bisher in verschiedenen Varianten versucht:

    PHP-Code:
    // Liest die csv-Datei ein und erstellt daraus ein Array
    $csv file($new_path);

    // Zählt die Elemente im Array
    $anzahl count($csv);

    // Zählpunkte für Schleife
    $i 0;


    /////////////////////////////////////////////////////////////////////////
    //////////////////// csv umwandeln //////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////
    $adressen fopen("Adressen.csv""w+");
    fwrite($adressen"Name;Straße;Ort\r\n");

    while (
    $i $anzahl) {                    
                
    fwrite($adressen$csv[$i].";");
                
    fwrite($adressen$csv[$i+1].";");
                
    fwrite($adressen$csv[$i+2]."\r\n");
                
    $i $i 3;
            } 
    Die Ausgabe ist leider nicht wie gewünscht sondern sieht wie folgt aus:
    Code:
    Name;Straße;Ort
    Name 1
    ;Straße 1
    ;Ort 1
    
    Name 2
    ;Straße 2
    ;Ort 2
    
    Name 3
    ;Straße 3
    ;Ort 3
    Ich habe auch schon mit file_get_contents und file_put_contents rumprobiert. Das Ergebnis war allerdings fast identisch.

    Vielen Dank für die Hilfe im voraus.

  • #2
    PHP-Code:
    $array file('address.txt');


    $fp fopen('addressen.csv''w');

    do{

        
    $line[] = trim(current($array));
        
    next($array);

        
    $line[] = trim(current($array));
        
    next($array);

        
    $line[] = trim(current($array));

        
    fputcsv $fp $line";" );
        
    $line null;

    }while ( 
    next($array) !== false ); 

    Kommentar


    • #3
      Zitat von protestix Beitrag anzeigen
      PHP-Code:
      $array file('address.txt');


      $fp fopen('addressen.csv''w');

      do{

      $line[] = trim(current($array));
      next($array);

      $line[] = trim(current($array));
      next($array);

      $line[] = trim(current($array));

      fputcsv $fp $line";" );
      $line null;

      }while ( 
      next($array) !== false ); 
      kommst wohl langsam auch auf den Genuss kleine Schnipsel für andere zu schreiben
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #4
        Zitat von protestix Beitrag anzeigen
        PHP-Code:
        $array file('address.txt');


        $fp fopen('addressen.csv''w');

        do{

        $line[] = trim(current($array));
        next($array);

        $line[] = trim(current($array));
        next($array);

        $line[] = trim(current($array));

        fputcsv $fp $line";" );
        $line null;

        }while ( 
        next($array) !== false ); 
        Vielen Dank dafür. Funktioniert soweit. Kannst du mir vielleicht noch kurz erklären, wie es funktioniert und was daran anders ist als bei meiner Version?
        Eine Frage hätte ich allerdings noch. Ganz unten ist nun eine leere Zeile. Bekomme ich die irgendwie weg?

        PHP-Code:
        $text=file("Adressen.csv");
        $textneu=array_pop($text);
        $handle=fopen("Adressen.csv""w");
        foreach(
        $text as $neudat){
            
        fputs($handle,$neudat);
        }
        fclose($adressen); 
        Damit lösche ich den letzten Eintrag. Die Leerzeile bleibt trotzdem noch.

        Danke.

        Kommentar


        • #5
          Schau dir halt die Funktionen im Handbuch an zu fputcsv und trim.
          Wozu willst du die letzte Zeile löschen, ich dachte du brauchst das für Word in einem Serienbrief, da stört es doch gar nicht.

          Kommentar

          Lädt...
          X