php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.10.2006, 15:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Laut Kontext bildet das XML aber eine Datenbankstruktur ab und diese ist sehr wohl mit CSV darstellbar.

Man muss ja nicht immer XML verwenden, nur weil es gerade hype ist.
Zergling-new ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.10.2006, 15:28  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Naja, ich verwende deshalb XML, weil ich das eben kriege.
Die Datei bastle ich mir nicht selbst, sondern sie wird bereitgestellt. Und die Benutzer sollen diese dann hochladen und auswerten lassen können.

Ich könnte durchaus beim ersten Aufruf das Ding parsen und nach CSV wandeln. Dann würde ich für die nachfolgenden Aufrufe, bei denen die eigentliche Verarbeitung erfolgt, einiges an Zeit sparen.
Die Datei besteht aus einer großen Anzahl gleichartiger Einträge. Es sind immer die gleichen Attribute vorhanden.
Nur am Ende ist noch ein anderes Element enthalten, das einen Timestamp enthält, zu dem die übrigen Daten generiert wurden. Das kann ich ja gesondert verarbeiten.

Was die Ausführungszeit betrifft:
Ich habe noch nicht ausprobiert, ob ich diese verändern darf. In so einer Umgebung würde es mich aber eigentlich wundern, wenn es funktioniert.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 12.10.2006, 15:35  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Probiers aus mit set_time_limit(), dann weißt dus

Wenn du XML bekommst würde ich das auch verwenden. Es dann nochmal in CSV umwandeln, würde ich nur machen, wenn du es gut kapselst und du dich nicht mehr drum kümmern musst, aus was für einem Datenformat die Daten kamen. Ich hatte nur gedacht, du kannst dir dann die XML-Verarbeitung sparen.

Zu deiner ursprünglichen Frage -wie stelle ich sicher, dass die Verarbeitung komplett und schnell ausgeführt wird und ein Feedback an den Benutzer möglichst in Echtzeit ausgeführt wird- kann ich dir jedoch auch keine hilfreichen Tipps geben, zumindest nicht s was du nicht schon weißt.
Zergling-new ist offline  
Alt 12.10.2006, 15:38  
Erfahrener Benutzer
 
Registriert seit: 10.09.2004
Beiträge: 339
mkl0815
Standard

Zitat:
Zitat von Zergling
Laut Kontext bildet das XML aber eine Datenbankstruktur ab und diese ist sehr wohl mit CSV darstellbar.
aber immer nur eine tabelle auf einmal, ausser man hat nur 1:1 beziehungen. bei 1:n oder n:m gehts schon nicht mehr. ausserdem müssen bei xml die einzelnen datensätze von der struktur nicht zwingend homogen sein, sie müssen nur der DTD genügen. es gibt z.b. optionale daten, attribute usw. das kannst du nur sehr schwer per CSV abbilden.

da ich die daten die "Der_Gerhard" verarbeiten muss nicht kenne, kann ich nur vom allgemeinen (also schlimmsten ) Fall ausgehen ud da geht CSV nun mal nicht so einfach.

mario.
__________________
Problems with Windows : REBOOT
Problems with Linux : BE ROOT
mkl0815 ist offline  
Alt 12.10.2006, 15:54  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

OK ich bin vom Standard-Fall ausgegangen und da phpMyAdmin auch einen CSV-Export und -Import anbietet, bin ich davon ausgegangen, dass sich dann auch alles sauber transformieren lässt.
Mal abwarten was der Pate sagt
Zergling-new ist offline  
Alt 12.10.2006, 16:19  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Der Pate sagt: "Daaaanke daaaanke meine lieeeben Freuuunde"
(Wie stellt man diese nette Stimme geeignet dar?)

Ausgehend von den Daten, die in der Datei gespeichert werden, würde ich mal annehmen, dass CSV sehr einfach möglich ware.
Bis auf den letzten Wert passt alles recht gut in eine einzige Tabelle.

Als allererste Schätzung aus dem Gedächtnis würde ich mal vermuten, dass ich aus einer 2MB XML-Datei 400kB CSV erhalten würde. (Ansehen kann ich mir das erste wieder heute Abend)
Damit würde ich auch bei deutlich größeren Dateien noch nicht an ein Speicherlimit stoßen. Nur bei der Konvertierung muss natürlich die XML-Datei bzw. die ausgelesenen Werte in den Speicher passen.

Kann ich die CSV-Datei eigentlich zeilenweise lesen (auch aus der Mitte), ohne das ganze Ding in den Speicher zu klatschen? Ich hab hier beim Mitlesen gelegentlich mal von Funktionen/Paketen für CSV-Dateien gelesen, aber noch keine verwendet.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 12.10.2006, 16:53  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Der_Gerhard
Kann ich die CSV-Datei eigentlich zeilenweise lesen (auch aus der Mitte), ohne das ganze Ding in den Speicher zu klatschen? Ich hab hier beim Mitlesen gelegentlich mal von Funktionen/Paketen für CSV-Dateien gelesen, aber noch keine verwendet.
Sollte eigentlich mit fseek() performant möglich sein. Wie gesagt ohne Garantie, aber sonst wär die Funktion sinnlos.

Edit: nein das offset ist ja die Anzahl Bytes, die du nicht kennst. Abgesehen davon muss die Datei ja trotzdem bis zu dieser Stelle durchsucht werden. Zumindest aber muss der Rest noch nicht ausgelesen werden! Schonmal etwas
Du könntest die Datei aber splitten.
Zergling-new ist offline  
Alt 12.10.2006, 17:00  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Mir würde es schon reichen, nicht die anfangs gelesenen Zeilen weiterhin im Speicher behalten zu müssen. Der Rest der Datei wird natürlich auch nicht gelesen.

Mit file() hab ich ja den ganzen Berg auf einmal im Speicher. ~90-95% davon sind Verschwendung. Damit könnte ich aber sofort die gewünschte Zeile rauspicken...

Insegesamt gefällt mir die Vorstellung, eine CSV-Datei zeilenweise zu lesen deutlich besser, als eine wesentlich größere XML-Datei jedesmal komplett zu parsen. Auch wenn ich in der CSV-Datei im Endeffekt natürlich die Daten am Anfang sehr oft lesen muss. Es geht aber zumindest erheblich schneller.

Jetzt muss ich natürlich erst noch ein geeignetes Trennzeichen suchen, das in den Daten nicht vorkommen darf....
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 12.10.2006, 21:52  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von Der_Gerhard
Mit file() hab ich ja den ganzen Berg auf einmal im Speicher. ~90-95% davon sind Verschwendung. Damit könnte ich aber sofort die gewünschte Zeile rauspicken... ;-)
Es zwingt dich keiner file() zu verwenden. :-) PHP kennt ja auch die schöne Funktion fgetcsv().

Zitat:
Zitat von Der_Gerhard
Jetzt muss ich natürlich erst noch ein geeignetes Trennzeichen suchen, das in den Daten nicht vorkommen darf....
Das Trennzeichen darf ruhig im Text vorkommen, da der Text selbst nochmal durch ein zweites Zeichen (z.B. ") eingeschlossen wird. Kommt nun innerhalb des Textes auch noch ein " vor, wird dieses durch ein Weiteres " maskiert.
xabbuh ist offline  
Alt 12.10.2006, 22:07  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Ja, PHP hat schon hübsche Funktionen.
Wie gesagt, habe ich mit den CSV-Funktionen noch nichts gemacht. Und die Datei müsste ich ja auch erstmal im gewünschten Format erzeugen.
Nicht überall bedeutet CSV ja, dass da Anführungszeichen rum sind, sondern manchmal eben nur, dass die Werte durch ein Komma oder anderes Trennzeichen abgetrennt sind.


Allerdings sieht es aus, als würde sich die ganze Sache so ziemlich erübrigen.
Wider Erwarten ist es tatsächlich auf dem Server möglich, die Ausführungszeit beliebig zu erhöhen.
Naja, mir kann's nur recht sein.


Jetzt muss ich nur noch aufpassen, ob ich an die Speichergröße stoße.
Aus einer 4MB XML-Datei wird eine memory_usage von rund 27MB. Und das ist noch nicht die Obergrenze.
Aber zum Glück geht sogar ein Vergrößern von memory_limit() auf gut 100M. Das gibt noch etwas Sicherheit.


Sollte ich wirklich an das Limit stoßen und es nicht vergrößern können, dann muss ich wohl zuerst auf dem PC die Daten umwandeln. Darauf kann ich ganz gut verzichten. Und momentan ist das ja auch nicht relevant.

Es kann soooo einfach sein
Aber dennoch danke für die Tipps.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
csv datei splitten

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.