Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Versuch es mal mit Zwischenspeichern der Teilstrings wie von Phoenix angesprochen.
|
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
@DeddyH: Ich hatte Phoenix' Antwort noch nicht gelesen, als ich Dir geantwortet habe, sorry.
@Phoenix: Kannst Du mir dafür mal ein Beispiel geben? Ich glaub ich verstehs gerade nicht so richtig ... habe um die Uhrzeit glaube immer meinen Tiefpunkt :-) Gruß Micha |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Also ich würde so vorgehen:
1.) alle Zeilen, die mit '--' beginnen enfernen.
Delphi-Quellcode:
2.) TempList.Text ist Stringvariable kopieren, damit arbeiten/ändern und Ergebnis zurückkopieren.
for i:=TempList.Count-1 downto 0 do // rückwärts zählen !!
if Trim(Copy(TempList[i],1,2))='--' then TempList.Delete(i); (so wie Phoenix das erklärt hat) >> daß es daran gelegen haben könnte ? Wichtig ist das Bottom-Up Design. Die Procedure wird solange umgebaut/verbessert bis mehrere Programmierer sie für gut und richtig befinden. Das gibt Sicherheit und eine gute Basis für ein Projekt. |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Zitat:
|
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Ich hab jetzt mal alles so geändert, wie ich es verstanden hab und bitte hiermit um erneute Überprüfung (ganz im Sinne des Bottom-Up Designs)
Delphi-Quellcode:
Gruß
function DeleteCommentsNeu(const SQLLines:TStringList):Boolean;
var beg,en,i,Laenge : integer; var Temp,begStr,enStr:String; begin Laenge:=Length(SQLLines.Text); for i:= SQLLines.Count-1 downto 0 do Begin Temp:=Copy(Trim(SQLLines[i]),1,2); if Temp='--' then SQLLines.Delete(i); end; Temp:=SQLLines.Text; while (pos('/*',Temp) <> 0) and (pos('*/',Temp)>pos('/*',Temp)) do begin beg:=pos('/*',Temp); en:=pos('*/',Temp); if en=0 then en:=Length(Temp); begStr:=copy(Temp,1,beg-1); enStr:= copy(Temp,en+2,Length(Temp)); Temp:=begStr+enStr; end; SQLLines.Text:=Temp; Result:=Length(SQLLines.Text)<>Laenge; end; Micha |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Zitat:
Zitat:
|
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Sieht auf den ersten Blick gut aus, allerdings löschst Du keine einzeiligen Kommentare am Zeilenende.
[edit] @Grumpy: das ist mir später dann auch aufgefallen :lol: [/edit] |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
So sieht's tatsächlich aus. Danke, ich werd's gleich noch ändern.
Gruß Micha |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
So, fertig:
Delphi-Quellcode:
Gruß
function DeleteCommentsNeu(const SQLLines:TStringList):Boolean;
var beg,en,i,Laenge : integer; var Temp,begStr,enStr:String; begin Laenge:=Length(SQLLines.Text); for i:= SQLLines.Count-1 downto 0 do Begin beg:=pos('--',SQLLines[i]); if beg <> 0 then Begin if beg=1 then SQLLines.Delete(i) else SQLLines[i]:=Copy(SQLLines[i],1,beg-1); end; end; Temp:=SQLLines.Text; while (pos('/*',Temp) <> 0) and (pos('*/',Temp)>pos('/*',Temp)) do begin beg:=pos('/*',Temp); en:=pos('*/',Temp); if en=0 then en:=Length(Temp); begStr:=copy(Temp,1,beg-1); enStr:= copy(Temp,en+2,Length(Temp)); Temp:=begStr+enStr; end; SQLLines.Text:=Temp; Result:=Length(SQLLines.Text)<>Laenge; end; Micha |
Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
Kleiner Vorschlag:
Delphi-Quellcode:
Und
for i:= SQLLines.Count-1 downto 0 do
Begin beg:=pos('--',Trim(SQLLines[i])); Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz