Text vor und nach Zelle einer *.CSV legen mit PHP?

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

  • Text vor und nach Zelle einer *.CSV legen mit PHP?

    Hi erstmal,

    ich hoffe ihr könnt mir bei meinem Denkansatz helfen ich weiss nicht wie ich das ganze angehen soll.

    Ich bin ein einigen Foren aktiv wo man Tabellen im CSV Format in den Beitrag tun kann. Bisher mache ich es so, dass ich in Excel die Daten habe und sie dann als *.csv exportiere.

    Nur möchte ich gerne, dass Spaltenweise vb/UBB/BBCode genutzt wird, um das ganze nicht allzu statisch zu lassen.

    Zum Beispiel habe ich in der 2. Spalte in Excel Urls stehen und da die ganze Url zuviel breite verschlingt würde es reichen vor jeder Zelle dieser Spalte in der *.csv datei den wert [url ] zu legen. So zb:

    Code:
    [u r l=
    LINK(Inhalt der Zelle)
    Code:
    ]Link[/u r l]
    Da ich gerne mit PHP arbeite dachte ich, dass es doch einen Weg geben muss das mit PHP zu realisieren. Die CSV Datei trennt die einzelnen Werte einer Reihe ja mit dem semikolon.
    also müsste man doch ein Script basteln können was:

    -Die *.csv einliest
    -Zeilenweise die Semikolons zählt und dann nach dem Prinzip
    "Nach dem 2. Semikolon den Code X1 einfügen und vor dem 3. Semikolon den Code X2 einfügen.
    -Danach Datei speichern und fertig

    Allerdings weiss ich nicht wie ich das einfügen und abzählen realisieren soll, bin auch kein PHP-Profi und bin ein bisschen überfragt wie ich ansetzen muss. Das einlesen und abspeichern sollte kein Problem sein nur dieses zeilenweise abzählen...

    Könnt ihr mir tipps geben wie in etwa ich da ansetzen muss?

    Vielen Dank schonmal im Vorraus für eure Hilfe

    Mfg Takeliner
    Zuletzt geändert von Takeliner; 16.01.2006, 03:10.

  • #2
    PHP-Code:
    $fh fopen('datei.csv''r');
    while ((
    $line fgetcsv($fh1000';')) !== FALSE ) {
        
    $line[2] = $X1.$line[2].$X2;
        
    $file[] = $line;
    }
    fclose($fh);
    $fh fopen('datei.csv''w');
    foreach (
    $file as $line) {
        
    fputcsv($fh$line';') or die('Schreibfehler!');
    }
    fclose($fh); 
    nur schnell langhin geschrieben, falls es überhaupt funktioniert, geht es sicher auch einfacher/schneller/eleganter.

    Kommentar


    • #3
      Nach einiger Bastelei bin ich nen großen Schritt weiter

      Das Script sieht momentan so aus:
      PHP-Code:
      <?php
      //fputcsv Funktion - Aus Usercomments von
      //h**p://de2.php.net/fputcsv

      [...]

      //Beginn des eigentlichen Scriptes
      //Voreinstellungen
      $X1 '[u r l=';
      $X2 ']Link[/u r l]';

      //Datei wird geöffnet
      $fhr fopen('datei.csv''r');
      //Array wird erzeugt
      while (($line fgetcsv($fhr1000';')) !== FALSE ) {
      //Die Zweite Spalte wurd mit den Werten Versehen
          
      $line[2] = $X1.$line[2].$X2;
          
      $file[] = $line;
      }
      //Datei wird geschlossen
      fclose($fhr);

      //Datei wird wieder geöffnet
      $fhw fopen('datei.csv''w');
      //Array wird ausgelesen
      foreach ($file as $line) {
      //Alles wird wieder als CSV verpackt
          
      fputcsv($fhw$line';') or die('Schreibfehler!');
      }
      //Datei wird geschlossen
      fclose($fhw);
      ?>
      Nur bleiben noch ein paar Probleme:

      1. Beim aufrufen des Scriptes kommt immer der Fehler "Schreibfehler!"

      2. Es wird nur eine Zeile der CSV Datei erzeugt, die dann so aussieht:
      Code:
      wert1;wert2;[u r l=http://www.google.de]Link[/u r l];wert4;wert5;
      Also klappt es halt nur für eine Zeile, wo liegt der Fehler?Hängt dies mit Problem 1 zusammen?

      Aber schonmal vielen Dank an onmorenerd für den lösungsansatz!!!

      mfg Takeliner
      Zuletzt geändert von Takeliner; 14.01.2006, 05:22.

      Kommentar


      • #4
        Original geschrieben von Takeliner

        1. Beim aufrufen des Scriptes kommt immer der Fehler "Schreibfehler!"
        klingt als ob Schreibrechte fehlen ?!? (CHMOD) oder fehler im script... hab noch nicht gesucht...
        2 meiner pages:

        Kommentar


        • #5
          Liegt aufm Lokalen WAMPP, also nix chmod...volle schreibfähigkeit...
          Kommta also nicht ums suchen herrum

          Es wird ja auch geschrieben. Wenn auch nur eine Zeile wobei ich nicht weiss woran das nun wieder liegt...

          mfg Takeliner
          Zuletzt geändert von Takeliner; 14.01.2006, 05:20.

          Kommentar


          • #6
            Lass dir $file zwichen while und foreach ausgeben - var_dump($file);

            Kommentar


            • #7
              Also dort werden beide Zeilen meiner Test.csv verändert...

              Hier mal die Ausgabe von $file(Habe sie mit Zeilenumbrüchen formatiert)
              PHP-Code:
              array(2

              [
              0]=>  array(6

              [
              0]=>  string(9"spalte1w1" 
              [1]=>  string(9"spalte1w2" 
              [2]=>  string(36"[u r l=http://www.google.de]Link[/u r l]" 
              [3]=>  string(9"spalte1w4" 
              [4]=>  string(9"spalte1w5" 
              [5]=>  string(0"" 

              [
              1]=>  array(8

              [
              0]=>  string(9"spalte2w1" 
              [1]=>  string(9"spalte2w2" 
              [2]=>  string(42"[u r l=http://www.php-resource.de]Link[/u r l]" 
              [3]=>  string(9"spalte2w4" 
              [4]=>  string(9"spalte2w5" 
              [5]=>  string(9"spalte2w6" 
              [6]=>  string(9"spalte2w7" 
              [7]=>  string(0"" 


              Ich vermute, dass in der fputcsv Funktion ein Fehler ist, welcher dann eintritt, wenn die nächste Zeile beginnen sollte.
              Nur kann ich keinen Fehler entdecken ..

              Hier mal die Funktion:
              PHP-Code:
              function fputcsv($filePointer$dataArray$delimiter){
                   
              // Write a line to a file
                  // $filePointer = the file resource to write to
                  // $dataArray = the data to write out
                  // $delimeter = the field separator
                  // Build the string
                   
              $string "";
                   
              $writeDelimiter FALSE;
                   foreach(
              $dataArray as $dataElement){
                     if(
              $writeDelimiter$string .= $delimiter;
                     
              $string .=$dataElement;
                     
              $writeDelimiter TRUE;
                     } 
              // end foreach($dataArray as $dataElement)
                       // Append new line
                   
              $string .= "\n";
                       
              // Write the string to the file
                   
              fwrite($filePointer$string);    
                   } 


              mfg Takeliner
              Zuletzt geändert von Takeliner; 15.01.2006, 00:24.

              Kommentar


              • #8
                Habe aktuellstes XAMPP mit PHP5 aufgespielt und kann so auf die selbstgebastelte fputcsv() verzichten. Das Script läuft auch allerdings fehlt noch das i-tüpfelchen damits läuft.

                hier der code
                PHP-Code:
                <?php
                error_reporting
                (E_ALL); 
                $X1 '[u r l=';
                $X2 ']Link[/u r l]';

                $fh fopen('datei.csv''r');
                while ((
                $line fgetcsv($fh1000';')) !== FALSE ) {
                    
                $line[2] = $X1.$line[2].$X2;
                    
                $file[] = $line;
                }
                fclose($fh);
                $fh fopen('datei.csv''w');
                foreach (
                $file as $line) {
                    
                fputcsv($fh$line';') or die('Schreibfehler!');
                }
                fclose($fh);
                ?>
                Leider wird in der datei.csv alles in einer Zeile geschrieben! Könnt ihr mir helfen, dass auch wieder jede CSV Spalte ihre reihe bekommt?Ich weiss nicht wo und wie ich in dem Script den Zeilenumbruch angeben muss...

                Vielen Dank im Vorraus

                mfg Takeliner

                Kommentar


                • #9
                  Woher weist du, dass da keine Zeilenumbrüche sind? Womit schaust du nach?

                  Kommentar


                  • #10
                    Hatte die Datei immer mit Excel geöffnet. Habs dann aufm anderen PC mit Excel geöffnet war alles i.O.

                    Dann bei mir Office neu installiert und nu wird se richtig angezeigt!

                    Entschuldigung, aber war voll am verzweifeln da niemand nen Fehler finden konnte.

                    Damit wäre das Problem gelöst und das Script voll Funktionstauglich!

                    VIELEN Dank euch allen die mir geholfen haben!

                    mfg Takeliner

                    Kommentar

                    Lädt...
                    X