nach langer Zeit habe ich mal wieder ein Problem mit meinem Xbase-Programm, dass ich bisher nicht lösen konnte. Ich lese CSV-Dateien ein, bereinige diese um ein paar Sonderzeichen und übertrage sie letztlich in eine dbf-Datei. So weit, so gut. Für den Austausch der Sonderzeichen nutze ich die Funktion StrTran(). Jetzt habe ich mal eine Datei mit fürchterlich vielen Datenzeilen und mein System meldet: "Nicht genügend Speicher" Befehl: STRTRAN
Hier mal der Bereich, um den es geht:
Code: Alles auswählen
IF !File(cDateiname)
MsgBox("Datei "+cDateiname+" nicht im Verzeichnis vorhanden!","Meldung")
aUebertrag:=NIL // Fehlerhinweis
cDateiLOG+=Chr(13)+Chr(10)+"Datei war nicht vorhanden: "+cDateiname
ELSE
cDateiInhalt:=MemoRead(cDateiname)
oBar:Update(17)
* O-Zeichen entfernen
oSay:SetCaption("Nullzeichen entfernen...")
c2DateiInhalt:="" // damit die Variable leer ist
>>> c2DateiInhalt:=StrTran(cDateiInhalt,Chr(0)) <<<
oBar:Update(35)
* Trennzeichen Semikolon setzen
oSay:SetCaption("Trennzeichen setzen...")
cDateiInhalt:="" // damit die Variable leer ist
cDateiInhalt:=StrTran(c2DateiInhalt,Chr(9),Chr(59))
oBar:Update(47)
* Zeilenendezeichen setzen (zunächst raus, wenn schon vorhanden, dann neu
oSay:SetCaption("Zeilenende kennzeichnen...")
c2DateiInhalt:="" // damit die Variable leer ist
c2DateiInhalt:=StrTran(cDateiInhalt,Chr(13)+Chr(10),Chr(10))
oBar:Update(68)
* Zeichensatz auf OEM
oSay:SetCaption("Zeichensatz konvertieren...")
cDateiInhalt:="" // damit die Variable leer ist
cDateiInhalt:=ConvToOEMCP(c2DateiInhalt)
oBar:Update(82)
* Doppelte Anführungszeichenin einfache tauschen
oSay:SetCaption("Anführungszeichen entfernen...")
c2DateiInhalt:="" // damit die Variable leer ist
c2DateiInhalt:=StrTran(cDateiInhalt,Chr(34),"'")
oBar:Update(100)
cDateiInhalt:=""
oSay:SetCaption("Einlesen in den Speicher...")
aUebertrag:=Str2Array(c2DateiInhalt,Chr(10),@oBar)
c2DateiInhalt:=""
oBar:Update(100)
cDateiInhalt:=NIL
Sleep(10)
nAnzSaetze:=Len(aUebertrag)
Vielleicht habt Ihr einen Tipp für mich?!
Ach, es läuft auf Windows 10, Rechner mit 16 GB Hauptspeicher und auf der Platte sind noch 160 GB frei.
Vielen Dank und viele Grüße
Christof