Würde bei kleineren Dateien immer dazu raten, diese einmalig einzulesen und anschließend aus dem Speicher heraus zu nutzen.
Die Arbeit direkt im Arbeitsspeicher beschleunigt die Aktionen mindestens um das 1000-Fache.
Hier ein Beispiel, wie man vorgehen könnte:
Code:
Global $data[1][5] = [[0]] ;[ListViewItem,ID,Objekt,Objekttitel,Objektbeschreibung]
GUICreate('GUI', 400, 240, Default, Default, 0x10C80000)
$guiListView = GUICtrlCreateListView('ID|Objekt|Objekttitel|Objektbeschreibung', 10,10,380,200)
$guiExportShort = GUICtrlCreateButton('Export Short', 10, 210, 190, 20)
$guiExportLong = GUICtrlCreateButton('Export Long', 200, 210, 190, 20)
Global $textDict = CreateTextDictionary(@ScriptDir & '\datei3 Text.txt')
Global $idDict = CreateIdDictionary(@ScriptDir & '\datei1 ID.txt')
FillListView(@ScriptDir & '\datei2 Link.txt')
While True
Switch GUIGetMsg()
Case -3
Exit
Case $guiExportShort
$exportData = ''
For $i=1 To $data[0][0]
$exportData &= $data[$i][1]
$exportData &= '|'
$exportData &= $data[$i][3]
$exportData &= @CRLF
Next
FileDelete(@ScriptDir & '\exportShort.txt')
FileWrite(@ScriptDir & '\exportShort.txt', $exportData)
Case $guiExportLong
$exportData = ''
For $i=1 To $data[0][0]
$exportData &= $data[$i][1]
$exportData &= '|'
$exportData &= $data[$i][3]
$exportData &= '|'
$exportData &= $data[$i][4]
$exportData &= @CRLF
Next
FileDelete(@ScriptDir & '\exportLong.txt')
FileWrite(@ScriptDir & '\exportLong.txt', $exportData)
EndSwitch
WEnd
Func AddToData($id,$object,$objectTitle,$objectDesc)
$data[0][0]+=1
ReDim $data[$data[0][0]+1][5]
$data[$data[0][0]][0] = GUICtrlCreateListViewItem($id&'|'&$object&'|'&$objectTitle&'|'&$objectDesc,$guiListView)
$data[$data[0][0]][1] = $id
$data[$data[0][0]][2] = $object
$data[$data[0][0]][3] = $objectTitle
$data[$data[0][0]][4] = $objectDesc
EndFunc
Func CreateTextDictionary($file)
Local $fileContent = FileRead($file)
Local $dict = ObjCreate("Scripting.Dictionary")
local $filtered = StringRegExp($fileContent, '(TEXT_[^ ]+) (.+)',3)
For $i=0 To UBound($filtered)-1 Step 2
$dict.Add($filtered[$i],$filtered[$i+1])
Next
Return $dict
EndFunc
Func CreateIdDictionary($file)
Local $fileContent = FileRead($file)
Local $dict = ObjCreate("Scripting.Dictionary")
local $filtered = StringRegExp($fileContent, '\n#define ([^ ]+) (\d+)',3)
For $i=0 To UBound($filtered)-1 Step 2
$dict.Add($filtered[$i],$filtered[$i+1])
Next
Return $dict
EndFunc
Func FillListView($file)
Local $fileContent = FileRead($file)
Local $regEx = StringRegExp($fileContent,'\n([^ ]+) (TEXT_[^ ]+) (TEXT_[^ ]+)', 3)
For $i=0 To UBound($regEx)-1 Step 3
AddToData($idDict.Item($regEx[$i]),$regEx[$i],$textDict.Item($regEx[$i+1]),$textDict.Item($regEx[$i+2]))
Next
EndFunc