| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

04-08-2009, 09:38
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
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
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|

04-08-2009, 09:42
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Jemand mit halbwegs PHP Kenntnissen, würde da evtl ein Script drüber scheuchen.
|

04-08-2009, 10:00
|
|
hhcm
PHP Senior
|
|
Registriert seit: Jun 2005
Ort: Viersen, NRW
Beiträge: 1.829
|
|
Mittels file_get_contents einlesen.. array_unique drüber bügeln.. file_put_contents zurück. Fertig.
__________________
gruss Chris
Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."
|

04-08-2009, 10:46
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
Zitat:
Zitat von combie
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 !
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|

04-08-2009, 10:55
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
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.
|

04-08-2009, 11:17
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
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.
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|

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.
|

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.
|

04-08-2009, 23:01
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
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
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|

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.
Geändert von piratos (04-08-2009 um 23:22 Uhr)
|

04-08-2009, 23:48
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
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
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|

05-08-2009, 10:42
|
|
|
Zitat:
Zitat von ways
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.
|

05-08-2009, 20:16
|
|
ways
Member
|
|
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
|
|
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
__________________
Coder never die, they just GOSUB without RETURN
Mein System
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
|
|
|
|
PHP News
|