![]() |
"Delete" funktioniert nicht
Hallo :)
Ich hab mal wieder nen Problem: Ich wollte aus meinem Array (ein String) die ersten beiden Zeichen löschen.
Delphi-Quellcode:
Die Fehlermeldung:
Delete(Array[x],1,2);
Zitat:
Grüße NeruvonoS |
Re: "Delete" funktioniert nicht
Was mir einfällt:
Der Array ist vom Typ ein Record. Die Stelle im Record aber ein String.
Delphi-Quellcode:
Das sollte aber eigentlich nicht stören oder?
Delete(Array[x].String,1,2);
|
Re: "Delete" funktioniert nicht
Zitat:
|
Re: "Delete" funktioniert nicht
Vorausgesetzt, das Array ist ein Array[x..y] of String, dann mal über eine Zwischenvariable gehen:
Delphi-Quellcode:
Das dürfte dann funktionieren ;)
var s: String;
s:=Array[x]; Delete(s,1,2); Array[x]:=s; |
Re: "Delete" funktioniert nicht
Okay ich machs doch mal etwas ausführlicher:
Delphi-Quellcode:
Ich Kopiere also den Array[x].Name ab der 3. Stelle(Da die ersten beiden = ' ' sind. und zwar soviele zeichen bis er das nächste ' ' findet. das nächste ' ' findet er aber nicht. Denn: pos sucht nur das 1. raus was er findet, dewegen möchte ich die ersten beiden zeichen kurzzeitig löschen und nicht ganz aus dem Array vernichten.
Button.Caption := Copy(Array[x].Name,3,pos(' ',System.Delete(Array[x].Name,1,2));
Zu System.Delete: [Error] Hauptteil.pas(410): Incompatible types Er sagt mir aber auch 'Incompatible types' wenn ich nur Delete nehme... ist also noch ein gedanken fehler drin... |
Re: "Delete" funktioniert nicht
Zitat:
|
Re: "Delete" funktioniert nicht
Wäre es möglich, dass man ein Array nicht "Array" nennen sollte und den Bezeichner "name" vermeiden sollte? Das könnte so manches durcheinander bringen. Vielleicht ist das der Grund?
|
Re: "Delete" funktioniert nicht
der array heißt nicht array,
aber was ist an Name so schlimm? |
Re: "Delete" funktioniert nicht
"Name" ist eigentlich ein reserviertes Wort, da viele Objecte/Komponenten die Eigenschaft "Name" haben. Da kann der Compiler schon mal ins stolpern kommen ;)
|
Re: "Delete" funktioniert nicht
Die Deklaration von Delete lautet
Delphi-Quellcode:
Damit ist ersichtlich, daß Delete keinen String zurückgibt, sondern den String im ersten Parameter ändert.
procedure Delete(var S: string; Index: Integer; Count: Integer);
Delphi-Quellcode:
tmpName := Array[x].Name;
Delete(tmpName, 1, 2); N := pos(' ', tmpName) - 1; // wir wollen den Blank ja nicht mit kopieren! if N < 0 then N := Length(tmpName); Button.Caption := Copy(tmpName, 1, N); // "1", da tmpName die ersten Blanks nicht mehr enthält |
Re: "Delete" funktioniert nicht
Das Problem dabei ist, dass ich schon nen 1100 Zeilen langen Quellcode habe.
Da alle ersetzen für einen Test würde es glaub ich nur unübersichtlicher erscheinen lassen. Vor allem da auch andere Captions mit Name oder Namen benannt sind. (die stören zwar nicht, aber dann sind die zum neuen Variablennamen nicht mehr gleich -> folge unübersichtlich... dabei geht es doch bisher noch :( ) Und es ist ja noch nichteinmal gesagt dass es daran liegt. ich probiers nochmal mit dem auslagern in nen anderen String. Dann sollte man es ja merken So @Uwe: Mein Array[x].Name ist IMMER mit 20 Zeichen belegt. Ansonsten seh ich noch keinen Unterschied zu meinem QC |
Re: "Delete" funktioniert nicht
ALSO
das programm läuft. das macht doch echt kein spaß, warum gibt denn Delete keinen String wieder aus? Grummel nagut danke trotzdem euch beiden Grüße NeruvonoS |
Re: "Delete" funktioniert nicht
Zitat:
|
Re: "Delete" funktioniert nicht
Zitat:
Selbst wenn deine Daten immer gewissen Regeln genügen, ist es kein Luxus, das Einhalten dieser Regeln auch zu überprüfen. Ein gutes Hilfsmittel dazu sind Assertions. |
Re: "Delete" funktioniert nicht
Zitat:
|
Re: "Delete" funktioniert nicht
Zitat:
Hast Du schon mal etwas von Refactoring gehört? |
Re: "Delete" funktioniert nicht
Zitat:
Wenn die gewünschte function/procedure nicht ganz das macht, was sie soll, dann definier einfach deine eigene:
Delphi-Quellcode:
Jetzt hast du eine function, die den Ursprungs-String nicht ändert und einen String zurück liefert.
function DeleteStr( const s : string; Index, Count : integer ) : string;
begin Result := s; Delete( Result, Index, Count ); end; cu Oliver PS: Das ganze Trara um 4 Zeilen Code :mrgreen: |
Re: "Delete" funktioniert nicht
Zitat:
Eieiei, kommt doch mal alle runter :) Ich werd hier mit Begriffen zugeworfen... Ich bin kein verrückter der einfach mal so ne Sprache lernt und sich mit allem auskennt, ich programmiere zum Spaß. Ist doch wohl klar, dass ich wahrscheinlich nicht sauber arbeite und ich wette schon fast mein QC 25% Zeilen zuviel hat, nur wegen unnützen kram. Ich habe nichts gegen Kritik oder Vorschläge, aber bitte, wenn ihr iwelche Begriffe nuzt die nicht jeder automatisch kennt, beschreibt sie bitte. Danke |
Re: "Delete" funktioniert nicht
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz