Autor Beitrag
Achim_Bim
Hält's aus hier
Beiträge: 3

Win XP Prof
D3 Prof
BeitragVerfasst: Di 23.03.04 16:50 
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:

ausblenden 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 user profile iconPeter Lustig: Delphi-Tags hinzugefügt
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3

Win XP Prof
D3 Prof
BeitragVerfasst: Di 23.03.04 17:55 
Hallo,
Hmmm .. ich habe folgenden Funktionsaufruf:

ausblenden 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 user profile iconPeter Lustig: Delphi-Tags hinzugefügt
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: 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,

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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.
ausblenden 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 
  // wo ist unser Zeichen?
  x:=System.Pos(c, os);
  if (x>0then 
    // gefunden, also rechten Teil des Strings kopieren
    Result:=System.Copy(os, x+1, Length(os)-x)
  else 
    // nichts gefunden, Zeichen kommt nicht vor, leeren String zurückgeben
    Result:='';
end// RString

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Achim_Bim Threadstarter
Hält's aus hier
Beiträge: 3

Win XP Prof
D3 Prof
BeitragVerfasst: 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