Sicherlich kann folgendes Skript der ein oder andere auch gebrauchen (insbesondere wenn man das Shopsystem Veyton in der Version 4.0.12 nutzt). Das Skript löscht aus einer Datei einfach die Leerzeilen heraus. Leider beherrscht diese triviale Funktion der Export-Manager des Shopsystems xt:commerce Veyton leider nicht. Wenn das Produkt nicht mehr auf Lager ist, dann wird einfach eine Leerzeile in das Produktfeed eingefügt. Für viele Portale (u.a. für den Google Merchant Center) ist das natürlich nicht ganz so optimal, da hier Fehlermeldungen vorprogrammiert sind.
Ich habe nun kurzerhand die vom Shop automatisiert erstellte Datei nochmals per Cronjob auf Leerzeilen überprüft und diese entfernt, so dass die Dienste welche den Feed ohne Leerzeilen benötigen dann auf diesen zugreifen können.
<?php $userdatei = fopen("datei-mit-leerzeilen.csv","r"); $outputdateiname = "datei-ohne-leerzeilen.csv"; if (file_exists($outputdateiname)) { $outputdatei = fopen($outputdateiname,"w"); } else { $outputdatei = fopen($outputdateiname,"a"); } while(!feof($userdatei)) { $zeile = fgets($userdatei,1024); if ($zeile != "\n"){ fwrite($outputdatei, $zeile); } } fclose($userdatei); fclose($outputdatei); ?>
Eventuell hilft es ja den ein oder anderem. Verbesserungsvorschläge sind natürlich willkommen. Fehlerhandling ist im Übrigen nicht so mein Ding wie man sieht 😉
Vielen Dank für den Tipp. Nachdem wir seit ein paar Wochen alle Seiten von html auf php umstellen, haben uns diese Tipps echt viel Zeit gespart. Danke für die Arbeit und viele Grüsse
Du solltest eventuell noch ein trim() einbauen, damit gehst du ganz sicher.
Danke Peter für den Tipp.
In diesem Script geht es jedoch vorrangig darum “reine” Leerzeilen zu entfernen. Sollte jetzt ein Leerzeichen vorhanden sein, dann wird diese Zeile natürlich nicht entfernt. Hier – so denke ich – kommt es auf den Einzelfall an. Eventuell ist ja ein Leerzeichen dann ungleich einer Leerzeile und es soll nicht entfernt werden.
Eine von Dir vorgeschlagene Überprüfung würde dann so aussehen:
if (trim($zeile) != “\n”){
Hier würde vor der Überprüfung auf die Zeilenschaltung die Leerzeichen entfernt werden. Hast Du das so gemeint?
trim müsste meines erachtens auch leerzeilen entfernen http://de2.php.net/manual/de/function.trim.php <- laut dieser beschreibung wird auch \n entfernt. Allerdings nur am ende und am Anfang eines strings. Du kannst auch http://de2.php.net/manual/de/function.str-replace.php nutzen und dort dementsprechend " " einsetzen, nur dann hast du den Nachteil, dass wirklich jeder Leerraum entfernt wird.
Aber deine Methode funktioniert ja, war auch nur ein Gedankengang 😀