[Gelöst] in einem String Leerzeichen und * löschen

14. April 2008 13:50

Hallo,

ich hätte mal wieder gern ein Problem :-)

Ich habe eine Datenbank, dort gibt es ne Tabelle mit einem Feld "BEZ1" (string).

Dort gibt es Datensätze

"Hundefutter super lecker *"
"Katzenfutter xy *"

usw.

Ich muss/will nun mit einem Programm automatisiert über alle Artikel gehen und dort schauen ob es in dem Feld einen * gibt, wenn Ja dann soll er dann noch alle Leerzeichen löschen die davor stehen. Also das Ergebniss soll halt dann so aussehen:


"Hundefutter super lecker"
"Katzenfutter xy"

Kriegt man so etwas gelöst über Navision?
Zuletzt geändert von tesarolle am 14. April 2008 17:34, insgesamt 1-mal geändert.

14. April 2008 14:06

Uff, da habt ihr aber ein für NAV ungeschicktes Sonderzeichen gewählt - * fungiert als Platzhalter.
Das heißt, du kannst NICHT auf alle Zeilen filtern, die einen Stern enthalten.

Dir bleiben zwei Möglichkeiten:
1) Mein Favorit: Ändert alle Einträge mit * um in ein anderes Sonderzeichen (wie wärs mit #?). Dann lässt sich in Zukunft gesondert darauf filtern.
2) Durchlaufe alle Datensätze und lese bei jedem aus, ob ein * vorliegt.

In beiden Fällen erhältst du über STRPOS Auskunft darüber, ob und wo das Sonderzeichen auftaucht.

14. April 2008 14:18

Hallo,

naja ich werd das direkt über SQL versuchen. Das Problem ist das es über 20000 Datensätze sind die am ende einen stern haben und eine unterschiedliche anzahl leerzeichen davor... :-) Das haben sich irgendwelche Anwender ausgedacht und alle haben das übernommen.

14. April 2008 14:59

Hallo,
habe gerade ein recht ähnliches Problem.
Wie sieht denn die Syntax aus um in einem Textfeld nach einem bestimmten Zeichen zu suchen und dieses zu löschen?

Danke,
Gruss
Christian

14. April 2008 16:12

ok, habe es nun nach etlichem stöbern noch gefunden

Code:
which:='"';
Contact.Name:=DELCHR(Contact.Name,'=',which);

14. April 2008 17:32

unter SQL sieht es so aus:
Code:
update LAGE0000 set
BEZ1 =  rtrim(replace(BEZ1,'*',''))



also lage0000 ist die tabelle und bez1 das feld...

Wenigstens SQL kann ich noch :-)

14. April 2008 18:21

rtrim, nicht ltrim? Interessant, dann scheine mehr vergessen zu haben als ich dachte.

Aber werden nur die Leerzeichen unmittelbar vor/nach dem * gelöscht oder ALLE, also wird "Zwei Wörter *" zu "ZweiWörter"?

15. April 2008 10:52

@Nathalie

RTRIM löscht meines Wissens nach alle rechts frei stehenden Leerzeichen.
Dein "ZweiWörter"-Beispiel funktioniert nicht, da ja da das Leerzeichen in der Mitte steht.

Schönen Tag noch
Schaarschi

15. April 2008 11:23

Schaarschi hat geschrieben:RTRIM löscht meines Wissens nach alle rechts frei stehenden Leerzeichen.

Eben, und tesarolle möchte doch die Leerzeichen links des *-Zeichens löschen?

15. April 2008 12:23

Ja, Natalie,
den * aber auch, deswegen macht er erst ein Replace und ersetzt den Stern durch ein Leerzeichen und dann erst den rtrim.
das ganze müsste aber eigentlich auch in Navision mit dem delchar gehen
Code:
BEZ1:=DELCHR(BEZ1,'>',' *');

wenn es nicht in einem Rutsch geht, dann eben so:
Code:
BEZ1:=DELCHR(DELCHR(BEZ1,'>','*'),'>',' ');