Autor | Thema: Bug: String Datenschwund .... | | Datum:25.10.01 20:03 
(mrk@mrk-soft.de) | |
Hi Roland,
Unter Code enthält einen String mit 16
Zeichen, nachzählen !!!, profan ist aber der
Meinung, das es nur 14 Zeichen sind ...,
jedenfalls die LEN Funktion.
* Dieser String ist nur ein beispiel, kann
aber so auch Real vorkommen, da es
rückgabewerte von Verzeichnissen sind ...
cls
declare a$
a$ = "daten\auto\a1712" '16 zeichen !!!
print len(a$) '14 zeichen ?????
waitkey
Analyse:
die Profan Sonderzeichen \a, \p, \n, usw.
schlagen hier mal wieder voll zu.
Der Hinweiss, das ich da doch bitte zwei mal
den Backslash schreiben soll, "daten\\au..."
ist NICHT akzeptabel, den erst jeden String
zu durchsuchen, den ich als Verz. zurückbekomme,
ob da ein \a oder sonstiges vorkommt, und
dann da \\ rauszumachen, kanns doch nicht
sein. (mit TRANSLATE wäre das ja einfach !!!)
Profan 7.5 sollte das irgendwie hinbekommen !!!
|
| | Datum:25.10.01 20:34 
(prof.chaos@netcologne.de) | |
Hi Thorsten,
das ist kein Bug, denn in deinem Dateinamen kommen zwei \a's vor, und die werden grundsätzlich in chr$(8)'s verwandelt. Da musst du \\a schreiben.
Sebastian
|
| | | Datum:25.10.01 21:06 
(webmaster@sekoenig.de) | |
Hallo,
> Der Hinweiss, das ich da doch bitte zwei mal
> den Backslash schreiben soll, "daten\\au..."
> ist NICHT akzeptabel, den erst jeden String
> zu durchsuchen, den ich als Verz. zurückbekomme,
> ob da ein \a oder sonstiges vorkommt, und
> dann da \\ rauszumachen, kanns doch nicht
> sein. (mit TRANSLATE wäre das ja einfach !!!)
das ist auch gar nicht nötig. In einem String, den Du von irgendeiner Funktion oder aus einer Eingabe bekommst, werden \a usw. nicht ersetzt.
Nur bei Strings, die als Konstanten im Quellcode vorkommen, schlägt der Präprozessor zu.
MfG
Sebastian
|
| | Datum:25.10.01 21:55 
(mrk@mrk-soft.de) | |
>das ist auch gar nicht nötig. In einem String,
>den Du von irgendeiner Funktion oder aus einer
>Eingabe bekommst, werden \a usw. nicht ersetzt.
>Nur bei Strings, die als Konstanten im
>Quellcode vorkommen, schlägt der Präprozessor
>zu.
Schön, nur bringt mich das nicht weiter,
um die länge des strings zu erfahren !!!
also das ganze in einem bereich, und dann
die Stringlänge des bereics abfragen,
um an die tatsächliche länge des Stings zu
kommen.
|
| | Datum:26.10.01 01:17 
(rgh-soft@t-online.de) | |
Wozu willst Du die Länge eines Strings in Erfahrung bringen, den Du als Literal (also in Anführungszeichen) im Programmtext stehen hast? Dessen Länge weißt Du doch.
Mit den Ersatzzeichen wird es genauso wie in (fast) allen anderen Sprachen (C, C++, Java, etc.) gehandhabt: Diese werden nur bei Strings in Anführungszeichen ausgewertet. Und da ist in PROFAN "\a" nun mal die Darstellung für EIN Zeichen, nämlich für Chr$(8).
Wird nun aber a$ im Programm ermittelt, etwa durch @GetDir$ oder @Par$(0), dann stimmt die mit Len ermittelte Länge 100%ig!
|
| | Datum:26.10.01 10:40 
(mrk@mrk-soft.de) | |
nicht ganz,
ein teil wird von einer Routiene zurückgegeben,
den rest addiere ich dann noch selber hinzu,
das ergebniss ist dann ein string, dessen
länge ich brauche ....
zur verdeutlichung mal eine Zeile aus
dem Programmteil:
temp7$ = "usr\prg\" + uverz$ + ".inx"
irgendwo im Programm benötige ich nun
die länge des Strings von temp7$, und
diese wird hier mit LEN falsch zurückgegeben.
Die Idee mit der Bereichsvariabel funktionert
auch nicht, der selbe effekt.
Thorsten
|
| | Datum:26.10.01 13:37 
(joerse@gmx.de) | |
Hallo Thorsten,
Dann mach doch einfach immer da, wo Du selber Stringteile verwendest doppelte Backslash.
Also:
temp7$ = "usr\\prg\\" + uverz$ + ".inx"
Sollte eigentlich problemlos funktionieren.
Gruß
Jörg
|
| | Datum: 28.10.01 21:56 
(GTelzerow@T-Online.de) | |
Hallo Thorsten,
dann benutze doch einfach immer die Verknüpfung der Strings.
Also:
cls
declare a$
a$ =
@Add$(@Add$(@Add$(@Add$("daten","\"),"auto"),"\"),"a1712") '16 zeichen !!!
print len(a$) '16 zeichen !!!
waitkey
Dies Sollte eigentlich immer problemlos funktionieren.
Gruß
Gerd
|
|
|