PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   verflixte CSV (https://www.php-resource.de/forum/php-developer-forum/97181-verflixte-csv.html)

ways 04-08-2009 09:38

verflixte CSV
 
erst einmal...Guten Morgen !

da will ich mich grad ganz frisch dransetzen für einen freund nen script zu erstellen, dass ihm seinen daten aus einer CSV Datei in MySQL überträgt, was ich ja nun bereits schon enige mal realisiert habe, aber dieser fall ist ein wenig anders... zumindest so, dass ich nicht weiß, wie ich das umsetzen kann und hoffe dass mir jemand von euch den richtigen tip geben kann !?

Diese CSV Datei beginnt wie die meisten...in der ersten Zeile stehen die Feldnamen und ab da an die Daten.. wie gewöhnlich...
dann jedoch, nach einer nicht festen anzahl von Zeilen, wiederholt sich die Feldnamen-zeile und genau das ist mein Problem, auf welchem Weg kann ich solch eine Feldnamen-Zeile ermitteln und überspringen bzw auslassen?

für tips oder kniffe wäre ich dankbar!
gruss
ways

combie 04-08-2009 09:42

Jemand mit halbwegs PHP Kenntnissen, würde da evtl ein Script drüber scheuchen.

hhcm 04-08-2009 10:00

Mittels file_get_contents einlesen.. array_unique drüber bügeln.. file_put_contents zurück. Fertig.

ways 04-08-2009 10:46

Zitat:

Zitat von combie (Beitrag 622516)
Jemand mit halbwegs PHP Kenntnissen, würde da evtl ein Script drüber scheuchen.

Tja, wären die Feldnamen immer gleich oder gleicher anzahl hätte ich das sicher auch mit meinen bisherigen kenntnissen geschafft.

Vielen dank für die freundliche Unterstützung. Manchmal ist weniger mehr ! :p

combie 04-08-2009 10:55

Zitat:

Tja, wären die Feldnamen immer gleich oder gleicher anzahl hätte ich das sicher auch mit meinen bisherigen kenntnissen geschafft.
1. Woher soll ich die Struktur deiner Daten kennen?
2. Unterschiedliche Feldnamen in einer CSV Datei? Das geht nicht.

ways 04-08-2009 11:17

1. Das stimmt, ich kann die leider auch nicht darstellen ohne von euch erschlagen zu werden, der grund dafür ist die Menge... nicht die Daten selbst.


2. Ein wenig rätselhaft von mir formuliert, das kann gut sein...

es ist so: diese CSV Datei enthält max 260 feldnamen.. diese Feldnamen haben auch eine feste Bezeichnung., jedoch werden immer nur die feldnamen in der CSV angelegt, die auch Daten enthalten. Die Anzahl der Feldnamen kann also variieren. Die DB-Tabelle hat natürlich alle 260 Feldnamen drin, nun muss ich es schaffen, anhand der CSV-Datei die aktuell verwendeten Feldnamen zu ermitteln und die werte darin in die Datenbank zu schreiben. Für mich ein wenig kniffelig...aber interessant.

wer interesse hat, dem schick ich solch eine massive CSV auch gern per email zu.

piratos 04-08-2009 13:28

Das ist also das mir bekannte Problem das in einer CSV Datei praktisch mehrere enthalten sind, in denen die Felder und Feldanzahl wechseln.

Nur lösbar, wenn die Feldbezeichnungen irgendwelche erkennbaren Unterscheidungsmerkmale zu den Daten haben.

Die Anzahl der Felder könnte man zur Detektion nehmen, wenn nicht zufällig eine Folge käme, die gleich der Anzahl vorherigen Folge entsprechen würde.

Also bleibt die Frage zu klären ob es einen oder sogar mehrere Unterscheidungsmöglichkeiten gibt oder nicht.
Wenn ja kann man darauf ansetzen.

piratos 04-08-2009 17:23

Habe da gerade mal einen alten Fall aus der Kiste geholt, da war es so ähnlich (typisch für den Export von Daten mancher Firmen für Händler).

Da hatte man aber zur Differenzierung 2 leere Zeilenvorschübe gemacht.

ways 04-08-2009 23:01

also die Anzahl der Feldnamen bleibt solange gleich, bis ich zusätzliche Feldnamen anfordere ( messewerte ), das hab ich grad klären können..., ansonsten hab ich gar keinen einfluss auf das generieren der CSV. Das wiederholen der Feldnamen innerhalb der CSV bleibt einem Muster treu... also das wechselt nicht, demnach kann ich wohl alle Feldnamen als ganzen String verwenden um diesen dann aus der CSV zu löschen...bzw zu überspringen.

ich muss da jedenfalls ne kluge lösung bringen, da die CSV ca 10MB hat...
ungefähr ( 1350 zeilen a 260 Spalten, davon sind 255 Spalten reine INTs)
das einlesen passiert auch noch alle 6 std...

hier wäre ein Hinweis der MySQL Profis gewünscht, bis zur welchen größe die Geschwindigkeit nicht leidet? Zum Abruf der daten wird eigentlich auch nur der aktuellste Datenpaket benötigt, max die letzen beiden. Also 2700 Zeilen a 260 Felder... die INTs haben eigentlich nicht mehr als 4 Zeichen (unsigned)

ich hab ja schon was ähnliches gemacht... aber da waren es nie soviele Daten....hab daher auch leider keine Erfahrung

piratos 04-08-2009 23:14

Code:

LOAD DATA LOCAL
        INFILE '/var/www/blaaa.csv'
        REPLACE
        INTO TABLE tabellenname
        FIELDS
                TERMINATED BY ';'
                OPTIONALLY ENCLOSED BY '"';

Damit kannst du auch einige zig tausend mehr ratz fatz einspielen.
Den SQL Code musst du natürlich deinen Gegebenheiten anpassen.

ways 04-08-2009 23:48

ich glaube mit dem LOAD DATA kenn ich mich zuwenig aus,
ich erhalte da zwar einträge, aber keinen der mir nen weg aufzeigt :(

ich probiers weiter

piratos 05-08-2009 10:42

Zitat:

Zitat von ways (Beitrag 622563)
aber keinen der mir nen weg aufzeigt :(

Da verstehe ich nicht was gemeint ist.
Wenn du Datensätze erhältst was entspricht dann nicht deinen Anforderungen ?

Die Methode ist eigentlich auch nicht anders als das zeilenweise auslesen einer Datei mittels fgetcsv .

Aber es umgeht Zeitprobleme, die man wahrscheinlich hätte wenn man es mit fgetcsv machen würde.

ways 05-08-2009 20:16

also ich schaffe es schon die CSV 1 zu1 so in mysql einzufügen..
aber ich hab bei meinem provider keinen zugriff auf data verzeichnis meines mysqls

und wie ich die feldnameneintröge so filtere is mir auch noch nicht ganz klar


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

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG