ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
1025
1025
EMPFEHLEN
-
07.07.10 12:02 #1schlseb ohne PW Tutorials.de Gastzugang
Hallo zusammen,
habe mir mit Hilfe von Pointern in TurboPascal eine Funktion geschrieben, welche das Vorkommen von Strings in anderen Strings prüft und diese ersetzt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
procedure StrRepl{(str1, str2, str3 :PChar)}; {--------------------------------------------------------------- Datum 05.03.10 SSe Letzte Žnderung Sucht innerhalb eines Strings (str1) nach einer Zeichnefolge (str2) und ersetzt diese durch eine andere (str3) (alle Vorkommen). Fr šbergabewerte sind nullterminierte Strings erforderlich, die entweder mit StrPCopy(PChar, String) (Unit Strings er- forderlich) direkt aus Pascalstrings erzeugt werden k”nnen, oder als selbstdefinierte Typen von Chararrays bergeben werden k”nnen. Beispiel: type CArray = array[0..X] of Char; {X = ben”tigte L„nge) var Ptr1, Ptr2 :array[0..Y]; {Y = ben”tigte L„nge) text :CArray; suchtext, ersatztext :String; begin ... Readln(f, text); suchtext:= 'abc'; ersatztext:= 'xyz'; StrRepl(text, StrPCopy(Ptr1, suchtext), StrPCopy(Ptr2, ersatztext)); ... end; ---------------------------------------------------------------} var anfang, ende, Puffer1, Puffer2 :PChar; len1, len2, len3 :Word; begin {$R+} Puffer1:= StrNew(str1); Puffer2:= StrNew(str1); len1:= StrLen(Puffer1); len2:= StrLen(str2); len3:= StrLen(str3); anfang:= StrPos(Puffer1,str2); while anfang <> nil do begin StrMove(Puffer2, Puffer1, anfang-Puffer1); StrMove(Puffer2+(anfang-Puffer1), str3, len3); ende:= anfang+len2; StrMove(Puffer2+(anfang+len3-Puffer1), ende, Puffer1+len1-ende); len1:= len1+len3-len2; StrMove(Puffer1,Puffer2,len1); anfang:= StrPos(Puffer1, str2); end; ende:=Puffer1+len1; ende^:= #0; StrCopy(str1,Puffer1); if Puffer1 <> nil then StrDispose(Puffer1); if Puffer2 <> nil then StrDispose(Puffer2); {$R-} end;
Nun tritt manchmal ein Laufzeitfehler auf, weil
Puffer2:= StrNew(str1);
in Puffer 2 'o´' schreibt, obwohl Puffer 1 die korrekte Kopie von str1 enthält. Den Laufzeitfehler (Fehler 204: Ungültige Zeigeroperation) liefert dann StrDispose(Puffer2)!
Hat vielleicht irgendjemand eine Idee, wie es dazu kommt?
-
09.07.10 11:55 #2schlseb ohn PW Tutorials.de Gastzugang
Mittlerweile kommt kein Laufzeitfehler mehr, sondern das Programm scheint sich wie in einer Endlosschleife aufzuhängen und zwar nach dem ersten Aufruf von StrNew() in der Prozedur. Allerdings wird die Prozedur an anderer Stelle in einer Schleife ausgeführt und wird zunächst mehrmals fehlerfrei ausgeführt, bevor es dann zu dem Fehler kommt.
Tatsächlich treten Probleme bei dieser Prozedur erst seit Dienstag auf, davor habe ich sie mehrere Male ohne Probleme getestet und seither keine Änderungen vorgenommen, wenn man von if Puffe# <> NIL absieht, welches ich in der Hoffnung ergänzt habe Fehler vorher abzufangen, denn am Dienstag kam die Laufzeitfehlermeldung noch aufgrund eines Leeren Puffer2 (=nil), bevor StrNew(...) dann Mittwochs plötzlich 'o´' zurückgegeben hat. (Alles wiederum, nachdem die Schleife bereits einige male durchgelaufen war!)!
Als kleine Hintergrundinfo sei angemerkt, dass ich versuche in einem vordefinierten Templet (.txt) darin enthaltene Platzhalter (<'Name'>) durch dynamische Einträge aus dem Programm zu ersetzen und das Ergebnis in einer Logdatei auszugeben.
Wäre wirklich toll, wenn jmd eine Idee zu meinem Problem hat, oder eigene Erfahrungen mit der Unit Strings schildern kann.
Gruß schlseb
Ähnliche Themen
-
Turbo Pascal Schleifen Problem
Von freizeit-psychologe im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 04.12.09, 16:45 -
Turbo Pascal
Von hpatrick im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 24.04.06, 17:31 -
Problem mit Turbo Pascal
Von Old_Faithful_m im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 27.02.04, 16:44 -
Turbo Pascal
Von mister_ed im Forum Sonstige SprachenAntworten: 4Letzter Beitrag: 31.01.02, 14:53 -
Turbo Pascal Wav
Von [EVIL] Soldier im Forum Sonstige SprachenAntworten: 4Letzter Beitrag: 13.08.01, 11:16





Zitieren
Login




