Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249388 (10824)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Bug: String Datenschwund ....
Thorsten
| 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 !!!
Sebastian Sprenger
| 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
Sebastian Sprenger
| Datum:25.10.01 20:35 (prof.chaos@netcologne.de) |
Oh, hab nicht zu ende gelesen...
Sebastian König
| 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
Thorsten
| 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.
Roland G. Hülsmann
| 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!
Thorsten
| 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
Jörg Sellmeyer
| 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
Gerd Telzerow
| 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

| Zurück zur Übersicht