Seite 1 von 1

Ersetzen mit ’Nur ganze Wörter’ funktioniert nicht richtig

Verfasst: 21.08.2019 03:37
von Tanaghra
Hallo,

ich wollte mal fragen, ob folgender Fehler auch bei Euch auftritt und ich ihn ggf. im englischen Forum posten soll.

Angenommen, ich will einen Variablennamen im gesamten Quellkode ändern. Ich habe das immer so gemacht, daß ich die entsprechenden Eingaben in den Feldern ’Suchen nach:’ und ’Ersetzen mit’ gemacht und den Haken bei ’Nur ganze Wörter’ gesetzt habe. Geht nicht (mehr), weil PureBasic nicht alles findet.

Wenn ich z.B. alle Variablen mit dem Namen Spa durch AdSp ersetzen will, so wird Spa in folgender Zeile nicht gefunden:

Code: Alles auswählen

For S=2 To Spa*6-2 Step 2
Dasselbe mit Sp in

Code: Alles auswählen

CopyImage(0, Sp*4)
Da der Fehler nur auftritt, wenn dem Variablennamen ein * (Multiplikationsoperator) folgt, bei ’Spa/4’ (Division) aber alles glatt läuft, liegt die Vermutung nahe, daß das irgendetwas mit der Funktion von * als Zeigerkennzeichner zu tun hat und es deshalb als zum Namen gehörig betrachtet wird. Leider eben auch in den Fällen, wenn es sich gar nicht um einen Zeiger handelt, sondern das * einfach nur Operator ist. Man wundert sich dann, warum nach dem Ersetzen plötzlich nichts mehr funktioniert, obwohl man doch am eigentlichen Kode gar nichts verändert hat.

Der beschriebene Fehler trat in der Version 5.62 auf und so auch in der neuen 5.71. Nach Möglichkeit keine Ratschläge wie: 'Wieso setźt Du keine Leerzeichen zwischen Faktoren?', denn jeder Programmierer hat seine bei eingewurzelten Gewohnheiten.

Re: Ersetzen mit ’Nur ganze Wörter’ funktioniert nicht richt

Verfasst: 21.08.2019 06:30
von Nino
Tanaghra hat geschrieben:ich wollte mal fragen, ob folgender Fehler auch bei Euch auftritt und ich ihn ggf. im englischen Forum posten soll.
Das Problem ist seit langem bekannt, und im engl. Forum schon öfter diskutiert worden.
Tanaghra hat geschrieben:liegt die Vermutung nahe, daß das irgendetwas mit der Funktion von * als Zeigerkennzeichner zu tun hat und es deshalb als zum Namen gehörig betrachtet wird.
Ja, das ist der Grund. Denn manchmal gehört ein * tatsächlich zum darauf folgenden Variablennamen. Der Editor kann leider nicht unterscheiden, ob ein * der Beginn einer Zeigervariablen oder der Multiplikationsoperator ist.
Tanaghra hat geschrieben:Nach Möglichkeit keine Ratschläge wie: 'Wieso setźt Du keine Leerzeichen zwischen Faktoren?'
Einen anderen Rat wird man dir leider kaum geben können.

Re: Ersetzen mit ’Nur ganze Wörter’ funktioniert nicht richt

Verfasst: 21.08.2019 07:12
von H.Brill
Ich habe mir schon seit Ewigkeiten angewöhnt, Variablen, Operatoren usw.
mit einem Blank zu trennen.

Code: Alles auswählen

For S = 2 To Spa * (6 - 2) Step 2
Dient auch zur besseren Lesbarkeit. Man sieht dann
auf den ersten Blick, ob es ein Zeiger oder Operator ist :

Code: Alles auswählen

*var vs. * var

Re: Ersetzen mit ’Nur ganze Wörter’ funktioniert nicht richt

Verfasst: 22.08.2019 19:26
von Tanaghra
@ Nino: Du schreibst:
Das Problem ist seit langem bekannt, und im engl. Forum schon öfter diskutiert worden.
Ich habe im englischen Forum in der 'Search query' im Feld 'Search for keywords' sowohl 'Find Replace *' als auch 'Find Replace multiplication' eingegeben. Es wurden aber keine Ergebnisse angezeigt, die mein Problem besprechen.

Könntest Du mir einen Link schicken zu einem entsprechenden Thread?

Re: Ersetzen mit ’Nur ganze Wörter’ funktioniert nicht richt

Verfasst: 22.08.2019 19:46
von Nino
Tanaghra hat geschrieben:Könntest Du mir einen Link schicken zu einem entsprechenden Thread?
Z.B. dieser Thread:
https://www.purebasic.fr/english/viewto ... =4&t=43010

Habe jetzt ehrlich gesagt keine Lust, nach den anderen Threads zu suchen, in denen dieses Problem diskutiert wurde. :-)