Entwickler-Ecke
Sonstiges (Delphi) - Fehlermeldung bei Functions Wert rückgabe
Achim_Bim - Di 23.03.04 16:50
Titel: Fehlermeldung bei Functions Wert rückgabe
Hallo, ich hab seit langer Zeit mal wieder was mit Delphi programmiert und bei dieser Gelegenheit eine Hifsfunktion, die mir den Rechten Teil eines Strings, ab einer Suchposition zurück geben soll:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function RString(os:string;s :char) : string; var i,pos : integer; ch,ergstring : string; begin pos:=0; for i := 1 to length(os) do begin ch := copy(os,i,1); if ch=s then pos:=i+1; end; ergstring:=copy(os,pos,length(os)-pos+1); result:= ergstring; end |
Das tut sie auch zufriedenstellend. Wenn ich einen String habe wie zb 'User1=Webmaster'. Wenn ich aber so einen String habe:'User1=Webmaster-Lokal' also mit Bindestrich oder auch mit Leerzeichen dann bekomme ich folgenden Fehler:
Im Projekt mailcheck.exe ist eine Exeption der Klasse EComponentError aufgetreten. Meldung:'Webmaster-Lokal'ist kein gültiger Komponentenname.
Ich kann damit nichts anfangen, vielleicht weis ja jemand was.
Gruß Achim
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
Udontknow - Di 23.03.04 17:26
Hallo!
Das Problem liegt nicht an deiner Funktion, sondern an dem Code, in dem du den Funktionsrückgabewert nutzt. Du versuchst anscheinend, bei einer Komponente den Namen (Bsp: Form1.Name:=Result) zuzuweisen. Komponenten-Namen dürfen jedoch keine Sonderzeichen, Umlaute etc. enthalten. Vielleicht verwechselst du irgendwo die Eigenschaft Name einer Komponente mit der Eigenschaft Caption?
Cu,
Udontknow
Achim_Bim - Di 23.03.04 17:55
Hallo,
Hmmm .. ich habe folgenden Funktionsaufruf:
Delphi-Quelltext
1: 2: 3: 4:
| Var name : string;
name:=RString(TempList.Items.Strings[i-1],'='); |
Hat es damit was zu tun?
Gruß Achim
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
MaxiTB - Di 23.03.04 18:13
Ganz schlecht - Name ist bereits ein property von Txxx.
Daher hab ich mir angewöhnt, lokalen Variablen ein l vorzusetzen (lName), dann kanns keine Namenskonflikte geben,
Udontknow - Di 23.03.04 18:50
Das würde keine Rolle spielen, da lokale Variablen Vorrang vor Feldern und Eigenschaften haben. Aber die Variable Name ist in dem Falle höchstwahrscheinlich global in einer Unit definiert, richtig? In diesem Fall solltest du tatsächlich den Namen der Variablen ändern oder ihn in der Form UnitName.Variablenname angeben.
PS : Die Namenskonflikte zwischen Feldern und lokalen Variablen kann man mit dem Aufruf "Self.FeldName" lösen.
Cu,
Udontknow
smiegel - Di 23.03.04 18:56
@Achim_Bim
Deine Funktion geht ein wenig kürzer, denn die Schleife die Du gebrauchst ist in diesem Zusammenhang überflüssig.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function RString(os:String; c:Char):String; var x:integer; begin x:=System.Pos(c, os); if (x>0) then Result:=System.Copy(os, x+1, Length(os)-x) else Result:=''; end; |
Achim_Bim - Di 23.03.04 21:51
Vielen Dank an alle für die Antworten.
Es war tatsächlich ein Problem mit globalen und lokalen Variablen.
Die funktion mit
"system.pos" hab ich übernommen. Ich bin doch noch ein bisschen eingerostet was das programmieren mit Delphi angeht. Wenn man nicht jeden Tag dran ist, vergisst man doch einiges.
Gruß Achim
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!