CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
29.03.2009, 17:43:38
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
Outlook2007 Kontakte über CSV auslesen
Ich hab mir vor ner Zeit schon mal ein kleines Script geschrieben, mit welchem ich mir Outlook-Kontakte über eine *.csv-Datei importieren kann.
Dazu hab ich die .csv-Datei einfach mit file() eingelesen und mit explode() aufgespaltet, danach in einer foreach-schleife mir die benötigten Werte geholt.
Das funktionierte soweit ganz gut, jedoch seit OL2007 hab ich irgendwie mit ungewollten Zeilenumbürchen zu kämpfen, die die "Datensätze" auseinander reissen.
Bei Outlook2007 wird die erste Zeile bei "fgetcsv" zerrissen die folgenden korrekt, bei file() & explode() ist die erste Zeile korrekt und alle anderen werden zerrissen.
Hab auch mit "fgetcsv" versucht... und hab festgestellt, das im Vergleich zu file() und explode() unterschiedliche Ergebnisse raus kommen.
Um das zu verdeutlichen hier mal ein Link, einmal OL2003 und OL2007
http://privatwebarea.dyndns.org/entw...seite/test.php
Hier noch der entsprechende Quellcode der beiden Möglichkeiten (nur PHP-Teil ohne HTML):
PHP-Code:
$datei = $_POST['csv_datei'];
if($_POST['csv_datei'] == 'Alex_Outlook_Kontakte.CSV') $outlook = 'Outlook 2007';
if($_POST['csv_datei'] == 'Outlook_gerhard1.CSV') $outlook = 'Outlook 2003';
if(isset($_POST['csv_datei'])){
$row = 1; // Anzahl der Arrays
$handle = fopen ("./tmp/".$datei."","r"); // Datei zum Lesen öffnen
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { // Daten werden aus der Datei
// in ein Array $data gelesen
$num = count ($data); // Felder im Array $data
// werden gezählt
$fgetcsv .= "<hr><strong>$num fields in line $row:</strong> <br>\n";
$row++; // Anzahl der Arrays wird
// inkrementiert
for ($c=0; $c < $num; $c++) { // FOR-Schleife, um Felder
$fgetcsv .= "[".$c."] ".$data[$c] . "<br>\n"; // des Arrays auszugeben
}
}
fclose ($handle);
$line = 1;
$kontakte = file("./tmp/".$datei."");
foreach($kontakte AS $kontakt){
$kontakt = str_replace("\"", "", $kontakt);
$v = explode(",",$kontakt);
$num = count($v);
$file .= "<hr><strong>$num fields in line $line:</strong><br>\n";
$line++;
foreach($v as $k => $value){
$file .= "[".$k."] ".$value."<br>";
}
}
}
Vielleicht könnt Ihr mir ja auf die Sprünge helfen?!
Besten Gruß
Alex
Geändert von AlexD (29.03.2009 um 17:50:34 Uhr)
|
30.03.2009, 13:32:39
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Ich vermute hier eher, daß es an der .csv selbst liegt. Anderen Falls könnte auch der Feldtrenner und die Zeichen für eingeschlossenen Text den Fehler verursachen.
Schau dir mal die .csv mit einem Editor an um die korrekten Feldtrenner und die Zeichen, die den Inhalt selbst einschliessen zu erkennen.
Ansonsten kann ich nur mal empfehlen die While-Schleife wie folgt zu testen.
PHP-Code:
//ob das Komma als Trennzeichen scheint ja klorrekt zu sein
while ( ($data = fgetcsv ($handle, 1000, ",","\"")) !== FALSE ) {
//dein Code
}
|
30.03.2009, 13:40:48
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Hab gerade mal unter WindowsMail ein paar Kontakte eingerichtet und exportiert.
Der Zeichensatz der Dati ist UTF-8 und die Feldtrenner sind Semikolons. Den enClosure scheint es nicht zu geben. Sollte OL2007 dies genau so speichern, müsstest du ein Semikolon als Feldtrenner nutzen. (";"). Allerdings bin ich der Meinung, daß dann das Script generell nicht korrekt laufen dürfte.
|
31.03.2009, 00:28:58
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Hi,
also WinMail und OL2007 trennen nicht gleich, die CSV ist anders aufgebaut.
Während Windows Mail nur mit Semikolon trenn, wird bei OL2007 mit Komma getrennt und der Wert in " " gesetzt.
Beispiel für WinMail:
Code:
Vorname;Nachname;2. Vorname;Name;Spitzname;E-Mail-Adresse;Straße (privat);Ort (privat);Postleitzahl (privat);Bundesland (privat); usw..
Outlook 2007
Code:
"Anrede","Vorname","Weitere Vornamen","Nachname","Suffix","Firma","Abteilung","Position","Straße geschäftlich","Straße geschäftlich 2", usw...
Hab die While-Schleife von Dir getestet, mit dem gleichem Ergebnis.
|
31.03.2009, 00:57:55
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Zitat:
Zitat von AlexD
Hab die While-Schleife von Dir getestet, mit dem gleichem Ergebnis.
|
Hast du die Möglichkeit dir die Steuerzeichen in der .csv anzeigen zu lassen?
Da die erste Zeile ja vollständig gelesen wird, kann ich nur noch vermuten, daß da ein Steuerzeichen von OL gesetzt wird, welches als Zeilenende interpretiert wird.
Auffällig ist, daß es immer an der gleichen Stelle vorkommt.
Die Feldnummer zum Inhalt stimmt ja mit der Feldnummer der Spaltenüberschrift überein.
Bin allerdings ratlos, da ich dieses Problem noch nie hatte. Liegt vielleicht daran, daß ich eine .csv nicht von Microsoft Produkten erstellen lasse. :P
Ansonsten versuch mal zu Testzwecken die Zeilenlänge etwas zu verlängern. Auf 1500 oder so. (Der Wert für die Zeilenlänge muß ja größer sein als die Zeile tatsächlich ist um das Ende der Zeile korrekt ermitteln zu können)
Glaub zwar nicht, daß es daran liegt, da die erste Zeile ja korrekt ausgegeben wird aber man weiß ja nie.
|
31.03.2009, 01:07:06
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Also ich hab jetzt mal die Zeilenlänge verändert, und hab sie mal auf 1500 gesetzt...
und schau Dir mal an was fgetcsv nun macht.
Wenn ich auf den ersten Blick so hinseh, dann lag es wohl wirklich an der Zeilenlänge!!
Warum jedoch bei file() ein Zeilenumbruch ist....?!
Die Funktion sollte doch eine Datei Zeile für Zeile lesen, egal wie lang diese ist. Oder lieg ich hier falsch?!
Wie kann ich mir die Steuerzeichen anzeigen lassen?
|
11.04.2009, 17:32:19
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: Outlook2007 Kontakte über CSV auslesen
hatte mal ein ähnliches Problem, jedoch mit Files aus excel. Das Problem hat sich gelöst, als ich das File mit einem Editor in ein anderes Charset konvertiert habe. Details weiß ich leider nicht mehr.
Domi
__________________
the best way to be ready for the future is to invent it
|
11.04.2009, 20:55:28
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: Outlook2007 Kontakte über CSV auslesen
Zitat:
Zitat von AlexD
Wie kann ich mir die Steuerzeichen anzeigen lassen?
|
Hab diese Option in meinem Editor drin. Da kann ich Steuerzeichen ein/aus schalten.
file() liest die Datei bis zum angegebenen Wert oder bis zum Ende der Zeile ein. Sollte aber im Grunde die gleiche Routine nutzen wie fgetscsv() mit dem Unterschied, daß es nicht gleichzeitig die einzelenen Werte innerhalb einer Zeile ermittelt.
Der Zeichensatz könnte es natürlich auch sein. Allerdings hab ich keine Erfahrung, welchen Zeichensatz OL2007 nutzt.
|
11.04.2009, 20:57:14
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: Outlook2007 Kontakte über CSV auslesen
wenn man das original File hätte könnte man es ja mal testen..
__________________
the best way to be ready for the future is to invent it
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:44:58 Uhr.
|