Datei zeilenweise in Datenbank eingeben

Hallo an alle,
ich bräuchte mal wieder Eure Hilfe und zwar habe ich eine Adabas- Datenbank auf Linux und soll jetzt eine CSV-Datei in diese einlesen.
Nun zu meinem Problem.Ich habe das mit folgendem Code realisiert:

<?php $row = 1; // Anzahl der Arrays
$handle = fopen ("Lieferung.csv","r"); // Datei zum Lesen öffnen while ( ($data = fgetcsv ($handle, 100000, ";")) !== FALSE ) { // Daten werden aus der Datei // in ein Array $data gelesen $ort="gels"; // gels hinzufügen $num = count ($data); // Felder im Array $data // werden gezählt echo " $num fields in line $row: \n"; $row++; // Anzahl der Arrays wird // inkrementiert for ($c=0; $c \n"; // des Arrays auszugeben } } fclose ($handle); ?\> Nun bekomme ich trotz allem keine Ausgabe und weiss nicht woran das liegt. Zur näheren Erläuterung: Ich wollte erst mal sehen ob die Datei korrekt eingelesen wird, deshalb der Versuch der Ausgabe.Kann das eventuell auch daran liegen, dass die Einträge (im Moment noch 100000 und steigend) für ein Array zu gross sind oder wie kann ich das anstellen, dass die Datei sofort in die Datenbank eingelesen wird Vielen Dank schon im vorraus Heike

habe nur 2 Tipps…
Moin Heike,

hmm, schwer zu sagen, warum du keine Ausgabe bekommst. Der Code-Abschnitt ähnelt doch sehr dem fgetcsv()-Beispiel aus dem Manual.
Ich entnehme deinem Text, dass du 100.000+ Datensätze in der CSV-Datei hast.
Aber zwei Tipps habe ich für dich:

Mir ist die Angabe 100.000 ein wenig hoch gegriffen. Dieser Parameter bedeutet bei fgetcsv, dass max. 100.000 Zeichen für die Aufnahme EINES Datensatzes vorgesehen sind. Schau mal, wieviel ein Datensatz wirklich im Maximum verbraucht…

Als nächstes würde ich nicht ALLE 100.000 Sätze am Schirm anzeigen (die Datenfelder auch noch untereinander). Beschränke die Durchgänge der while-Schleife mal auf 3-5 und schaue was passiert.

Ich hoffe, du kommst so etwas weiter…

Cheers!
Hawky

Hallo Hawky,
ich habe da Problem schon gelöst, hatte die Datei anstatt .php einfach .html genannt. Das sind meine Flüchtigkeitshighlihgts. Allerdings hatte ich nur die Ausgabe gemacht um zu überprüfen wie die Daten ausgelesen werden. Nun möchte ich diese aber sofort in eine Adabas Datenbank einlesen und zwar besser nicht über ein Array weil diese Datei sehr gross werden kann. :wink: Ist halt eine Datenbank. Wie lese ich diese jetzt am besten ein Zeilenweise? und wenn ja welcher Befehl in PHP wäre dafür am besten geeignet. Bin leider noch am Anfang mit meinen PHP-Kenntnissen
Vielen Dank schon mal
Heike

mit ODBC
Hallo Heike,

da PHP keine „eingebaute“ Adabas-Unterstützung hat (könnte man aber reincompilieren), müsste ich wissen, ob du per ODBC an deine ADABAS-DB rankommst.
Hast du die CSV-Datei unter Windows verfügbar?
Falls ja, kannst du dein PHP Skript im wesentlichen behalten. Du müsstest dann auf deinem Windows Rechner eine Apache/PHP Umgebung haben.
Weißt du wie du eine ODBC-Datenquelle konfigurierst?
Weißt du wie du einen SQL-String (hier INSERT) zusammenbaust? (Achtung auf die Datentypen der Adabas Tabelle achten: Strings quoten, d.h. in einfache Anführungszeichen, numerische Daten nicht)

Wenn du das geklärt hast kannst du mit den PHP-Funktionen odbc_open(), odbc_exec() und odbc_close() arbeiten.
Schau mal ob, du in der Online Doku weiterkommst.

Die while-Schleife liest deine CSV Datei schon zeilenweise.
In deinem Programm stehen in der Variablen $data ja die Daten EINER Zeile für deine Adabas Tabelle. Also in $data[0] für die erste Spalte bis $data[1] für die zweite, usw.

Mit diesen Werten baust du nun das SQL-Kommando INSERT zusammen und schickst es mit odbc_exec an die ADABAS-DB.
Hier ein kleines Beispiel, dass annimmt in der ersten Spallte der Datenbank-Tabelle steht ein numerischer Wert und in der zweiten ein Text:

...
$db = odbc\_open(...);
...
while(...) // CSV Zeilenweise lesen
{ 
 $sql = "insert into MeinTabellenName Values (" . $data[0] . ", '" . $data[1] . "' )";
 $rc = odbc\_exec($db, $sql); // ab zur DB
 ...
}
...
odbc\_close($db);

Wenn du das Problem nicht UNBEDINGT mit PHP lösen willst, geht es natürlich auch mit einem VB-Programm z.B. aus Excel heraus…

Melde dich ruhig bei mir! Ich helfe dir gern weiter!

Cheers!
Hawky