Autor Beitrag
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 16.06.03 10:13 
guden

hab nur ne kurze frage
ausblenden Quelltext
1:
 if copy(msg , Pos(':',msg)+1,1) = '-' then					


wiso gibt der mir hier kein wert zurück ? also von pos kommt kein wert, und dementsprechend von copy ja auch nicht.

die msg heist z.b.

asd: -xxxxxxx

sieht einer einen fehler?

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 16.06.03 10:32 
Er liefert dir sehr wohl einen Wert und zwar ' '. Zwischen dem Doppelpunkt und dem Minuszeichen ist ein Leerzeichen. Wenn du also Doppelpunkt-Position + 1 machst, landest du beim Leerzeichen.

_________________
Ist Zeit wirklich Geld?
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 16.06.03 10:35 
narf .... dank dir dann mach ich eben 2 :rofl:

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 16.06.03 11:15 
also ich habs nu versuch ... geht imma noch nich

ich hab mal screens gemacht
erst der wert der msg
user defined image

und ich hab ein breakpüoint gesetzt dann bekommt der diesen wert raus
user defined image

hilft mir ahh :D

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 16.06.03 11:46 
Und warum holst du dir mit Copy nun 2 Zeichen? (Letzter Parameter von Copy). Wie sollen 2 Zeichen denn jemals einem Zeichen entsprechen?

Pos ist eine Funktion und keine Variable, die der Debugger so leicht anzeigen kann. Deswegen schreibt er auch "Niht verfügbarer Wert".

_________________
Ist Zeit wirklich Geld?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.06.03 11:58 
foxy hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
if copy(msg , Pos(':',msg)+1,1) = '-' then					

Warum prüfst du nicht einfach nur:
ausblenden Delphi-Quelltext
1:
if(pos('-',msg) > 0then { ... }					

oder meinetwegen auch
ausblenden Delphi-Quelltext
1:
if(pos('-',msg) > pos(':',msg)) then { ... }					

oder
ausblenden Delphi-Quelltext
1:
if(pos('-',msg) = pos(':',msg)+2)) then { ... }					


?
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 16.06.03 12:04 
hmmm .... ja das mach ich ... also das erste mathias geht nicht, weil dann würde ja immer die schleife eintreten, wenn ein minus in dem string wäre

die 2. möglichkeit versuch ich mal hört isch gut an *gg*
dank euch beiden

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 16.06.03 14:45 
Besser, schneller und einfacher ist

if msg[Pos(':', msg) + 1] = '-' then

Allerdings auch gefährlicher. Denn hier kann auf ein Char zugegriffen werden, das nicht da ist (weil String zu kurz). Wenn man aber es ausschließen kann oder es vorher prüft, dann ist die Methode die einfachste.

Der Fehler kann aber auch bei der Copy-Version vorkommen, allerdings ohne eine Fehlermeldung. Bei Copy wird ein String zurückgegeben und ein String kann auch leer sein. Ein Char kann nicht leer sein, da er immer ein Zeichen lang ist. Es kann aber auch bei if copy(msg , Pos(':',msg)+1,1) vorkommen, daß das Ergebnis ein leerer String ist.

_________________
Popov
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 16.06.03 14:50 
foxy hat folgendes geschrieben:
die 2. möglichkeit versuch ich mal hört isch gut an *gg*
dank euch beiden


Da kann es unter Umständen zu Problemen kommen. So wie ich es verstanden habe soll das "-" Zeichen gleich nach dem ":" Zeichen vorkommen. Die zweite Methode, so wie sie ist, kann einen falschen Wert zurückliefern, weil das "-" Zeichen auch X-Zeichen später kommen kann.

Deshalb eine kleine abgeänderte Alternative:

ausblenden Quelltext
1:
if((pos('-',msg) - 1) = pos(':',msg)) then { ... }					


Hier muß "-" gleich hinter ":" kommen.

_________________
Popov
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.06.03 15:56 
Aber im Beispiel:
foxy hat folgendes geschrieben:
asd: -xxxxxxx

gibt es ein Leerzeichen nach dem Doppelpunkt, @Popov. Dann könnte man auch gleich
ausblenden Delphi-Quelltext
1:
if(pos(': ',msg) < pos('-',msg)) then { ... }					

ausprobieren, bzw.
ausblenden Delphi-Quelltext
1:
if(pos(': ',msg) = pos('-',msg) - 2then { ... }					

um auf Nr. Sicher zu gehen. :)
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 16.06.03 16:34 
Also, um es ganz richtig zu machen und gut, muß man es sovieso anders machen. Ich zum Beispiel hab eine Engine für eine Scriptsprache geschrieben. Auch da muß ich Zeichen auslesen. Auch wenn Copy & Co. eine schnelle Methode gewesen wären, so hab ich für das auslesen der Zeichen eine eigenständige Funktion geschrieben. Neben dem, daß mir die Funktion das nächste Zeichen ausgibt, kann ich natürlich auch alle dazwischenliegenden Leerzeichen ignorieren. Damit nicht genug, sagt mir die Funktion auch den Status des Zeichen, z.B. OK, wenn ein Zeichen gelesen wurde oder ENDOFLINE, wenn kein Zeichen mehr gelesen werden konnte. Mit so einer Funktion brauch ich mich um die Kleinigkeiten des Lebens nicht mehr kümmern. Das ganze lohnt sich aber erst wenn man einen Parser schreibt. Aber falsch ist es nicht.

_________________
Popov