Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlermeldung "Zu wenig Arbeitsspeicher" (https://www.delphipraxis.net/118362-fehlermeldung-zu-wenig-arbeitsspeicher.html)

DeddyH 6. Aug 2008 13:38

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
Versuch es mal mit Zwischenspeichern der Teilstrings wie von Phoenix angesprochen.

DerAndereMicha 6. Aug 2008 13:40

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

sx2008 6. Aug 2008 13:42

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
Also ich würde so vorgehen:
1.) alle Zeilen, die mit '--' beginnen enfernen.
Delphi-Quellcode:
for i:=TempList.Count-1 downto 0 do // rückwärts zählen !!
  if Trim(Copy(TempList[i],1,2))='--' then
    TempList.Delete(i);
2.) TempList.Text ist Stringvariable kopieren, damit arbeiten/ändern und Ergebnis zurückkopieren.
(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.

DeddyH 6. Aug 2008 13:49

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
Zitat:

Zitat von sx2008
Delphi-Quellcode:
for i:=TempList.Count-1 downto 0 do // rückwärts zählen !!

Wieso? Solange keine Zeilen gelöscht werden (und sich dadurch TempList.Count ändert), kann IMHO nichts passieren.

DerAndereMicha 6. Aug 2008 14:02

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:
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;
Gruß
Micha

OldGrumpy 6. Aug 2008 14:09

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von sx2008
Delphi-Quellcode:
for i:=TempList.Count-1 downto 0 do // rückwärts zählen !!

Wieso? Solange keine Zeilen gelöscht werden (und sich dadurch TempList.Count ändert), kann IMHO nichts passieren.

Ja, genau so sieht das aus. Und jetzt schau nochmal auf den fett hervorgehobenen Teil :)

Zitat:

Zitat von sx2008
Code:
for i:=TempList.Count-1 downto 0 do // rückwärts zählen !!
  if Trim(Copy(TempList[i],1,2))='--' then
    [b]TempList.Delete(i);[/b]


DeddyH 6. Aug 2008 14:12

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]

DerAndereMicha 6. Aug 2008 14:17

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
So sieht's tatsächlich aus. Danke, ich werd's gleich noch ändern.

Gruß
Micha

DerAndereMicha 6. Aug 2008 14:26

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
So, fertig:

Delphi-Quellcode:
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;
Gruß
Micha

DeddyH 6. Aug 2008 14:30

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"
 
Kleiner Vorschlag:
Delphi-Quellcode:
for i:= SQLLines.Count-1 downto 0 do
    Begin
      beg:=pos('--',Trim(SQLLines[i]));
Und
Zitat:

Delphi-Quellcode:
if beg <> 0 then
      Begin
        if beg=1 then SQLLines.Delete(i)
        else SQLLines[i]:=Copy(SQLLines[i],1,beg-1);
      end;

könnte man auch durch case ersetzen, ist aber nicht unbedingt nötig. Ansonsten teste ich das heute Abend mal zu Hause :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Seite 2 von 4     12 34      

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