Thread Variable Anzahl an Array-Zeilen an Subroutine übergeben
(11 answers)
Opened by norvel at 2012-08-03 16:42
Hallo Allerseits,
nachdem mein alter Code anscheinend aussichtslos war, habe ich nun begonnen mit Subroutinen zu arbeiten, jedoch läuft ein Teil (wie gleich beschrieben) noch nicht so ganz. File-Aufbau: Das .csv File hat in der ersten Zeile Überschriften, alle Weiteren Zeilen sind mit Daten Gefüllt (angenommen: 124 Zeilen, 23Einträge pro Zeile). Bsp: CUSTOMER_ID,CUSTOMER_NAME,COUNTRY_NAME,AREA_NAME...COUNT_DATE(YYYYMMDD) 1111, Kunde1, Germany, NRW, ,...20120725 1111, Kunde1, Germany, NRW, HereAndThere,...20120726 1112, Kunde2, Germany, BW...20120726 ... ... Problem: Ich habe für Schritt 2 noch keine anständige Lösung gefunden.. Verarbeitungsschritte: 1. Alle Zeilen der csv-Datei Zeile für Zeile in ein Array laden (-> file-unabhängig) Code: (dl
)
1 use warnings; 2. Zeilen des Arrays in z.B. 10er Schritten an eine Subroutine übergeben (Ausnahme: die Datei hat keine feste länge, der Code muss auch variable längen handlen können. Anzahl Zeilen Bsp: 5, 123, 10, 6001. Also müssen manchmal weniger als 10 Zeilen im Ersten oder letzten Durchlauf übergeben werden ) Dieser (nicht funktionierender) Code kann gerne ersetzt werden..ich denke, dass dies ohnehin keine gute Lösung wäre - auch wenn sie funktionieren würde: Code: (dl
)
1 foreach my $set (0..int(@allrows-1/$size_of_array_chunks)) ### generate the chunks (Explanation: with "$size_of_array_chunks = 100" this loop will do "@allrows[0..99]", then "@allrows[100..144]" if the File has 155 Rows) 3. In dieser Subroutine werden die Zeilen in ein 2D-Array geschrieben, sodass ich alle Werte im Folgenden einzen verwenden kann (Code-Teil nur zur Veranschaulichung...) Code: (dl
)
1 sub do_sth 4. Mit 2 Werten dieses Arrays wird ein SQL-Query String aufgebaut 5. Dieser Query string wird in einen anderen SQL-Code eingefügt und an die Datenbank gesendet (Ziel des Querys: die zuvor eingelesenen Daten durch den SQL-Query mit weiteren Daten ergänzen) 6. Den entsprechenden Rückgabewert dem entsprechenden Eintrag zuweisen (durch if-Abfragen die jeden Eintrag des Arrays) 7. Daten in ein CSV-File Schreiben 8. Die nächsten 100 Zeilen einlesen ACHTUNG: Sind nicht immer genau 10 Zeilen, können auch mal wie im Bsp. nur 4 Zeilen im letzten Durchlauf sein) Wie immer vielen Dank für eine Hilfe! :) |