Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249388 (10824)
  Suchen
 Zurück zur Übersicht
 AutorThema: Bug: String Datenschwund ....
Thorsten
Datum:25.10.01 20:03 Antwortenals Email verschicken (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 !!!



Sebastian Sprenger
Datum:25.10.01 20:34 Antwortenals Email verschicken (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



Sebastian Sprenger
Datum:25.10.01 20:35 Antwortenals Email verschicken (prof.chaos@netcologne.de) 


Oh, hab nicht zu ende gelesen...


Sebastian König
Datum:25.10.01 21:06 Antwortenals Email verschicken (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


Thorsten
Datum:25.10.01 21:55 Antwortenals Email verschicken (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.




Roland G. Hülsmann
Datum:26.10.01 01:17 Antwortenals Email verschicken (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!


Thorsten
Datum:26.10.01 10:40 Antwortenals Email verschicken (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



Jörg Sellmeyer
Datum:26.10.01 13:37 Antwortenals Email verschicken (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


Gerd Telzerow
Datum: 28.10.01 21:56 Antwortenals Email verschicken (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



 Zurück zur Übersicht