Entwickler-Ecke

Sonstiges (Delphi) - Warum löscht er das letzte Zeichen ?


bis11 - Mi 21.08.02 09:29
Titel: Warum löscht er das letzte Zeichen ?
Hi Leute,

ich bin wohl irgendwie zu blöde dafür, ich wende den folgenden Befehl an :


Quelltext
1:
  Delete(regValue,0,j);                    


Wenn ich jetzt nun regValue wieder ausgebe schneidet er mir immer das letzte Zeichen ab. Hat jemand eine Idee, warum das so ist und wie ich es beheben kann ?


ao - Mi 21.08.02 09:40

Hallo bis11,

irgendwie brauche ich für eine vernünftige Antwort mehr Code! :wink:

Gruß
Andreas


Renegade - Mi 21.08.02 09:49

was willst du mit dem Befehl denn erreichen? Und wie berechnet sich j?


bis11 - Mi 21.08.02 09:52

Hi,

hier ist mehr Code :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
   j : Integer;
   regValue : String;
begin
   ....
    j := length(Value);
    Delete(regValue,0,j);
    Label1.Caption := regValue;
   ....
end;


Ich lösche immer nur vom Anfang des Strings. Das hängt in einer Abfrage drin ob das Value existiert. Existiert es, dann soll es vom Anfang gelöscht werden.


GPF - Mi 21.08.02 10:42

Die Indizierung bei Strings beginnt mit 1 - und nicht mit 0. Dies ist noch eine alte Win31 Konvention. Damals wurde an Position 0 immer die Länge des Strings gespeichert (1 byte, unter Windows 3.1 waren nur Strings bis 255 Zeichen zulässig!).
Unter Delphi 2 aufwärts ist dies nur noch bei den ShortStrings möglich, da unter Windows 95/NT/... diese Limitierung aufgehoben wurde und nun Strings fast beliebig lang sein können.

Die Codezeile lautet dann korrekt
Delete(regValue,1,j);


bis11 - Mi 21.08.02 10:56

Auch mit der Codezeile Delete(regValue,1,j) schneidet er mir den letzten Buchstaben ab. Was nun ?


patmann2001 - Mi 21.08.02 12:17

j ist die Länge des gesamten Strings. Deshalb muß Du so proggen:
Zitat:

Delete(regValue,1,j-1);

cu Patmann


bis11 - Mi 21.08.02 13:02

Also, ich habe folgendes herausgefunden, egal wie ich den Befehl schreibe der letzte Buchstabe wird noch immer von Ergebnisstring abgeschnitten. Der Unterschied besteht jetzt nur noch darin, wenn ich das alles über Variablen mache und das wieder in die Datei reinschreibe löscht er den letzten Buchstaben des Ergebnis-Strings. Nehme ich den gleichen String und starte den Vorgang manuell über einen Button und die Strings sind jeweils in einem Edit-Feld, dann löscht er passend den String, der gelöscht werden soll. Warum ?


bis11 - Mi 21.08.02 14:04

Weiß denn keiner Rat, warum von meinem Ergebnisstring immer der letzte Buchstabe abgeschnitten wird, wenn ich das wieder in die Datei zurückschreibe ?


Teutobod - Mi 21.08.02 15:07

Hast du eigentlich schon mit dem Debugger nachgeschaut ob das letzte Zeichen beim delete... schon abgeschnitten wird oder erst beim in die Datei zurückschreiben?


bis11 - Mi 21.08.02 16:12

Ich habe mittlerweile den Fehler gefunden. Die Positionsangabe 0 oder 1 als feste Angabe hat durch meine Abfragen nicht funktioniert, ich mußte die Position durch eine POS-Abfrage ermitteln. Dann funktionierte es. Denn mal gab er Null aus und mal 1.

Trotzdem danke für eure Hilfe.