| Autor |
Beitrag |
foxy
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: Mo 16.06.03 10:13
guden
hab nur ne kurze frage
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
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: 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 
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: Mo 16.06.03 10:35
narf .... dank dir dann mach ich eben 2 
_________________ "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 
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: 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
und ich hab ein breakpüoint gesetzt dann bekommt der diesen wert raus
hilft mir ahh 
_________________ "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
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: 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
|
Verfasst: Mo 16.06.03 11:58
|
|
foxy 
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: 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
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: 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
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: 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:
Quelltext 1:
| if((pos('-',msg) - 1) = pos(':',msg)) then { ... } |
Hier muß "-" gleich hinter ":" kommen.
_________________ Popov
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
Delphi-Quelltext 1:
| if(pos(': ',msg) < pos('-',msg)) then |
ausprobieren, bzw.
Delphi-Quelltext 1:
| if(pos(': ',msg) = pos('-',msg) - 2) then |
um auf Nr. Sicher zu gehen. 
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: 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
|
|