PASCAL String löschen

pape

Mitglied
Hallo!

Ich lese mit
readln(eingabe) einen String ein.
z.B: x+222

Wenn ich nun die eingabe lösche und danach x+2 eingabe steht in eingabe wieder x+222 also werden 22 von der letzten eingabe hinzugefügt...

Ich habe den String so "gelöscht":
Code:
for i:=1 to Ord(eingabe[0]) 
  do eingabe[i]:=' '; 
eingabe[0]:=Chr(0)

So habe ich es auch versucht:
delete(eingabe, 0, Ord(eingabe[0]));

und eingabe:=' '; geht auch nicht

eingabe ist so deklariert:
eingabe: string;

Warum klappt das nicht, bzw. wie kriege ich das hin?
 
Was du schreibst, kann nicht vollständig sein, denn wenn man einen String hat, dann kann man ihm natürlich mit dem := Operator einen Wert zuweisen. Die entscheidende Information musst du daher weggelassen haben!

Die Delete-Anweisung wendest du falsch an. Der zweite Parameter muss den Index angeben, ab dem gelöscht werden soll, und muss daher minimal 1 sein.
 
Ich weise dem String doch durch readln(eingabe) einen Wert zu!

das delete funktioniert trotz anderem Parameter nicht.

Das Problem liegt darin, dass der String eine reservierte Speicherlänge von 255 zeichen hat wobei im ersten (also eingabe[0]) die Länge in form eines chr steht.
Beim löschen usw. wird nur dieser Wert verändert.
Im Speicher stehen aber dennoch die alten Zeichen drin...
 
Zuletzt bearbeitet:
Du solltest mal dein ganzes Programm posten. Wie ein Pascal-String funktioniert, weiß ich sehr gut! Ich habe folgendes Programm in Turbo Pascal geschrieben, und es funktioniert tadellos. Ich habe auch im Debugger den Speicherbereich kontrolliert, den der String belegt, und habe somit festgestellt, dass alle Zeichen vorschriftsmäßig auf #32 gesetzt wurden, der alte Wert steht also nicht mehr im Speicher. Dein Problem verstehe ich daher nicht ganz :)

Code:
program Test ;

var
  eingabe: string ;
  i: Integer ;

begin
  ReadLn( eingabe ) ;  // hier gebe ich "x+222" ein
  WriteLn( Eingabe ) ;   // hier zeigt er "x+222" an

  for i:=1 to Ord( eingabe[0] ) do
    eingabe[i] := ' ' ;
  eingabe[0] := Chr( 0 ) ;

  ReadLn( eingabe ) ;  // hier gebe ich "x+2" ein
  WriteLn( eingabe ) ;  // hier zeigt er "x+2" an, im Speicher steht NUR "x+2"
end.

Übrigens kannst du den String auch besser löschen, indem du mit FillChar den Speicherbereich überschreibst. Die Schleife ist nicht sehr elegant.
 
und jetzt mach mal das :
Code:
readln(eingabe) { x+222}
writeln(eingabe);
{hier löschen.. wenn man einfach nur ein eingabe:='' schreibt wird man unten den string ausgegeben bekommen...}
readln(eingabe); {x+2}
for i:=1 to 254 do
writeln(eingabe[i]);

.. ;)

btw: ich kann mein prog nicht posten, weil es aus 16 Seiten Quelltextbesteht.

Ich habe das Problem nun aber schon andersgelöst, indem ich die bedingung für die Schleife etwas geändert habe (bezogen auf das hauptprogramm... wäre jetzt zu viel zu tippen.. das problem besteht ja nicht mehr).

trotzdem danke ;)
 
Zuletzt bearbeitet:
Siehst du, das meinte ich in meinem ersten Post -- hättest du dazu geschrieben, dass du in einer Schleife den kompletten Speicherbereich anzeigen willst, hätte ich gleich gewusst, wo das Problem liegt :) FillChar ist übrigens immer noch eleganter als eine Schleife, die alle Zeichen überschreibt. Übrigens hat der String nicht 254 Zeichen, sondern 255. Insgesamt belegt er 256 Bytes.
 

Neue Beiträge

Zurück