ich habe die Aufgabe aus zwei CSV Dateien eine zu machen. Aufgabe ist simpel, hole aus Stocks.csv den ProductId, schau nach ob es in Produkte.csv vorkommt, wenn ja, dann gehe Produkte.csv Zeile für Zeile durch, bis die richtige Zeile gefunden worden ist, dann Teile die Zeile, füge die mit Informationen aus Stocks.csv zusammen.
Stocks.csv = ca. 6.500 Zeilen groß (ca. 300 KB)
Produkte.csv = ca. 40.000 Zeilen groß (ca. 14MB)
Dafür braucht mein PC ca. 8 Minuten.
Mir ist klar, es geht Zeile für Zeile durch, je tiefer sich die gesuchte Zeile unten befindet desto länger braucht es.
1. Frage: Kann man das irgendwie beschleunigen, sprich habe ich im Script ein Logik / Denk Fehler?
2. Frage: Ich habe sowas ähnliches mit XML-Dateien gemacht, die Dateien waren 30x größer, trotzdem hat AHK innerhalb von wenigen Sekunden die Aufgabe erledigt. Arbeitet XML parse von @just me anders? (siehe: https://www.autohotkey.com/boards/viewtopic.php?f=20&t=85026)
LG
Code: Select all
#NoEnv
#SingleInstance, force
SetBatchlines, -1
StartZeit := A_TickCount
FileRead, Bestaende, Data\Stocks.csv
FileRead, Produkte, Data\Produkte.csv
DateiName := "Data\BestandPlusEKpreis.csv"
File := FileOpen(DateiName, "w")
if !IsObject(File)
{
MsgBox Kann "%DateiName%" nicht zum Schreiben öffnen.
return
}
Loop, parse, Bestaende, `n, `r
{
if (A_LoopField = "")
continue
BestaendeTeilen := StrSplit(A_LoopField, ";")
ProductId := BestaendeTeilen[1]
EAN := BestaendeTeilen[2]
Count := BestaendeTeilen[3]
if InStr(Produkte, ProductId)
{
Loop, parse, Produkte, `n, `r
{
if InStr(A_LoopField, ProductId)
{
ProdukteTeilen := StrSplit(A_LoopField, ";")
Preis := ProdukteTeilen[3]
Bezeichnung := ProdukteTeilen[4]
Marke := ProdukteTeilen[6]
File.Write(ProductId ";" EAN ";" Marke " " Bezeichnung ";" Count ";" Preis "`n")
break
}
}
}Else
File.Write(ProductId ";" EAN ";" Count "; Nicht in ProduktListe drinnen `n")
}
File.Close()
VerstricheneZeit := A_TickCount - StartZeit
MsgBox, % VerstricheneZeit / 1000 " sekunden sind verstrichen."