Platzhalter %1 bei STRSUBSTNO

6. Januar 2011 18:07

Hallo zusammen,

ich möchte eine Textvariable füllen (glbtext1), aber der Platzhalter wird nicht ersetzt. Setze ich um den Platzhalter Leerzeichen, dann wird er ersetzt. Leider habe ich in der Suche nichts gefunden, was mir das erklärt oder wie ich es anders schreiben soll. Warum funktioniert es nicht und/oder wie macht man das richtig?

Code:
 glbint := 7;
 glbtext1 := STRSUBSTNO('01.0%1.2011', glbint);
 glbtext2 := STRSUBSTNO('01.0 %1 .2011', glbint);
 glbtext3 := STRSUBSTNO('01.0' + '%1' + '.2011', glbint);
 MESSAGE('%1 --- %2 --- %3)',glbtext1,glbtext2,glbtext3);


Die Message:
01.0%1.2011 --- 01.0 7 .2011 --- 01.0%1.2011)

Ich freue mich, wenn Ihr mein Wissen erweitert.

Danke, Apfl

Re: Platzhalter %1 bei STRSUBSTNO

6. Januar 2011 18:48

STRSUBSTNO scheint zu erwarten, dass du ganze "Wörter" ersetzen möchtest.
Eventuell könnte es helfen, wenn du deinen Text samt %1 (diesmal ohne überflüssige Leerzeichen) in eine Textkonstante (nicht zu verwechseln mit Variable) packst und diese ausgeben lässt:
Code:
STRSUBSTNO(DeineTextkonstante, glbint);


Ansonsten bietet sich für eine einfache Datumsausgabe ohne STRSUBSTNO immer das FORMAT an.
Wenn du beschreibst, wofür du die bisherige Programmierung gebraucht hast, können wir dir vielleicht einen eleganteren Weg vorschlagen.

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 09:03

arbeite mit "CONVERTSTR", als "Platzhalter" setze einfach einen Buchstaben ein
Code:
glbint := 7;
glbtext1 := '01.0A.2011';
glbtext2 := CONVERTSTR(glbtext1,'A',FORMAT(glbint));
MESSAGE('%1 --- %2 --- %3)',glbtext1,glbtext2);


mfg Michael

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 09:22

Wenn du Datumswerte "zusammenbauen" möchtest, würde grundsätzlich erstmal mit den Datumsfunktionen arbeiten. Eine Konvertierung in einen String kannst du nachher immer noch machen.

Ansonsten funktioniert auch
Code:
glbtext1 := '01.0' + STRSUBSTNO('%1',glbint) + '.2011'

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 09:37

Mit den Datumswerten und wie man leichter dran kommt habt ihr ja alle recht, aber das Problem ist doch seltsam und lässt sich auch ohne Datum nachvollziehen.
Nimmt man zum strsubstno einen String wie 'aa%1bb', klappt alles problemlos. Es hapert anscheinend, sobald Punkte das '%1' umgeben. Nimmt man zB
Code:
message(strsubstno('.1.%1.1.','B'));
wird '.1..' ausgegeben :-?
Zuletzt geändert von McClane am 8. Januar 2011 01:07, insgesamt 1-mal geändert.

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 10:03

Da hast du schon recht. Es sieht definitiv wie ein Bug aus. Nur, da es ja zig Workarounds gibt, wird MS den von der Priorität her sehr gering einstufen und wahrscheinlich erstmal daran nichts machen.

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 11:00

Hallo,

vielen Dank für die Antworten.

Ursprünglich wollte ich ein Datum erstellen, wobei mir nur der Monat in einem TextFeld zur Verfügung steht. Habe dann mit STRSUBSTNO und EVALUATE alles mögliche probiert und mich an der Umsetzung von STRSUBSTNO mit %1 festgefressen. Da ich im späteren Bereich meines Projektes (Übernahme von Daten) wahrscheinlich noch Nummern umändern muss, habe ich diesen Eintrag eröffnet. Werde Eure Antworten mal nachbauen.

Neuer Tag, neues Glück, mein Datum-Problem habe ich jetzt mal so gelöst:
Code:
      EVALUATE(glbVarInt, MeineTabelle.TEXTFELD);
      glbDatumsfeld :=  DMY2DATE(01,glbVarInt,2011);


Gruß, Apfl

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 12:11

Fehlt nur noch ein wenig Fehlerbehandlung falls evaluate fehlt, dann isses perfekt :-)

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 12:43

Hi JanGD,

wie meinst Du das? Fehlerbehandlung ist immer wichtig, aber wieso könnte evaluate fehlen, wenn ich es untereinander schreibe? Kannst genauer erklären, was Du meinst?

Gruß, Apfl

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 12:47

"failt" war wohl gemeint :wink:

Also "If evaluate (..) then".

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 12:56

Aha, danke. Habe ich schon oft gelesen, aber wohl noch nicht im Hirn verankert.

Re: Platzhalter %1 bei STRSUBSTNO

7. Januar 2011 17:03

McClane hat geschrieben:Mit den Datumswerten und wie man leichter dran kommt habt ihr ja alle recht, aber das Problem ist doch seltsam und lässt sich auch ohne Datum nachvollziehen.
Nimmt man zum strsubstno einen String wie 'aa%1bb', klappt alles problemlos. Es hapert anscheinend, sobald eine Kombination aus 0 und Punkten das '%1' umgibt. Nimmt man zB
Code:
message(strsubstno('.1.%1.1.','B'));
wird '.1..' ausgegeben :-?


Gut zu wissen. :shock:

Bei
Code:
MESSAGE('.1.%1.1.', 'B');

gibt es übrigens das gleiche Problem.

Ich vermute er parst nach % und einer Zahl, wobei die Zahl hier Dezimal sein kann.
Ausgewertet werden aber nur ganze Zahlen wie 1, 2, 3, usw. daher zeigt die Variable ins Nirvana oder NULL.

Das heißt im Umkehrschluss man sollte %1 bzw. #1 nie auf einen String in der Form:

Code:
strsubstno(String1+'%1'+String2','1000'); //ungewollte Seiteneffekte möglich

anwenden, wenn man nicht genau weiß was in String2 steht.

Bei zwei Punkten gibt es glücklicherweise keine Probleme, sonst wären sicherlich einige Codeunits überfällig. :mrgreen:

Code:
strsubstno('%1..%2', '1000', '2000');

funktioniert *puh*

mfg,
winfy