[gelöst] unerwünschte Leerzeichen im String

7. September 2010 12:58

Hallo liebe Gemeinde...

Ich hab das Problem das ich beim zerlegen eines Strings: z.b.: 22#X20011#234

unerwünschte leerzeichen in die Variable Artikelnr(CODE) mit übergebe.

Ich extrahiere aus dem String "X20011" punktgenau mit STRCOPY, aber irgendwie fügt der mir noch leerzeichen mit an. Um genau zu sein, wenn ich dann noch
MESSAGE(Artikelnr+'#') ausgeben will, überschreibt er mir sogar das "#"-Zeichen bzw zeigt es nicht an... aber wenn ich MESSAGE(Artikelnr+'---#') angebe, dann zeigt er mir zwar "X20011 ---#" an aber immernoch mit dem Leerzeichen... -.-
Laut STRLEN(Artikelnr) sind 10 Charzeichen in dem String aber meines erachtens nach sind "X20011" nur 6 Charzeichen...

Weiß jemand woran das liegt?

Wenn der code benötigt wird, poste ich ihn gern nach. Ich hoffe aber darauf das es auch ohne geht und ich einfach irgendwas Navisionspezifisches nicht weiß.

danke schonmal :)
-----------
Ok wie gewünscht der Code:

Code:
  Artikelnr := COPYSTR(Scannfeld,HoleTrennzeichenPosition(0)+1,HoleTrennzeichenPosition(HoleTrennzeichenPosition(0)+1));


Code:
HoleTrennzeichenPosition(SuchPositionStart : Integer) : Integer
IF STRLEN(TrennzeichenBarcode) = 1 THEN BEGIN
  Trennzeichen := TrennzeichenBarcode;
END ELSE Fehler(Fehler11);

Trennzeichenposition := SuchPositionStart;
REPEAT
  Trennzeichenposition += 1;
  // Schutzklausel gegen Endlosschleifen
  IF Trennzeichenposition > STRLEN(Scannfeld) THEN
    EXIT(Trennzeichenposition);
UNTIL Scannfeld[Trennzeichenposition] = Trennzeichen;
EXIT(Trennzeichenposition);


-----------
Das Bild stellt folgenden Code dar: MESSAGE(FORMAT(STRLEN(Artikelnr))+Artikelnr+'_#');
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Cr4cks am 7. September 2010 14:29, insgesamt 3-mal geändert.

Re: unerwünschte Leerzeichen im String

7. September 2010 13:54

Nein, Code wäre schon von Vorteil an dieser Stelle.

Re: unerwünschte Leerzeichen im String

7. September 2010 14:00

Hi!

Also ich habe das mal getestet:

Code:
test := '22#X20011#234';
message(copystr(test,4,6) + '#');


Das Ergebnis lautet: X20011#
wobei das letzte # das ist, das ich selbst angehängt habe... keine Leerzeichen, kein verschlucktes Hashzeichen.
Die leerzeichen müssen schon in deiner Artikelnummer enthalten ist.

Gruß

Christian

Re: unerwünschte Leerzeichen im String

7. September 2010 14:15

Ich glaube ich habs raus... muss es nurnoch beweisen... Meine COPYSTR hat folgende inhalte: COPYSTR(Scannfeld,4,10) weil ich immer dachte das der vom ganzen String ausgeht und nicht ab der Startposition...
Zuletzt geändert von Cr4cks am 7. September 2010 14:26, insgesamt 1-mal geändert.

Re: unerwünschte Leerzeichen im String

7. September 2010 14:26

Also die Funktion verstehe ich nicht ganz, nachdem sie sogar rekursiv aufgerufen wird. Der Copystr Befehl erwartet aber als dritten Parameter nicht die Endeposition sondern die länge des zu kopierenden Strings.
Es gäbe aber auch andere Alternativen:
Vorausgesetzt dein String hat immer genau 2 Trennzeichen, könntest du:
a) mit einem CONVERTSTR die Hashes zu Kommas konvertieren und dann mit einem Selectstr auf die 3 Elemente zugreifen
b) mit einem DELCHR und einem STRPOS die Zeichen bis einschließlich des ersten Trennzeichens löschen und dann nochmals alles vom zweiten bis zum Ende, übrig bliebe dann dein gesuchter String
Eleganter ist allerdings Variante a

Re: unerwünschte Leerzeichen im String

7. September 2010 14:28

christiand hat geschrieben:Der Copystr Befehl erwartet aber als dritten Parameter nicht die Endeposition sondern die länge des zu kopierenden Strings.


und da war mein Denkfehler. :)
Jetzt muss ich mir nurnoch ausdenken wie er variabel herausbekommt wie lang der String eigtl ist... da wird wohl deine Variante B zum Vorschein kommen :) danke für die doppelte Hilfe :lol:
Zuletzt geändert von Cr4cks am 7. September 2010 14:31, insgesamt 2-mal geändert.

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:31

Wie wäre es mit STRLEN :D

Gruß,
Sebastian

Re: unerwünschte Leerzeichen im String

7. September 2010 14:33

Cr4cks hat geschrieben:Jetzt muss ich mir nurnoch ausdenken wie er variabel herausbekommt wie lang der String eigtl ist...

Lies mal die Onlinehilfe (C/SIDE Reference Guide) zu COPYSTR. Wenn du von Pos X bis Ende des Strings kopieren möchtest, dann lass den Bis-Parameter einfach weg.

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:33

Sebastian Pfliegel hat geschrieben:Wie wäre es mit STRLEN :D

Gruß,
Sebastian



Das bringt mir in der Position nichts, da STRLEN in einem String zwischen den Trennzeichen nicht die Länge messen kann sondern nur den vom gesamten String. ;-)

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:40

Probies mal so:

Code:
test := '22#X20011#234';
test := convertstr(test,'#',',');
message(selectstr(2, test));

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:40

ich würde es so machen:

strg:=DELCHR(strg,'=',' ');

Damit hast du doch die leerzeichen raus.

Re: unerwünschte Leerzeichen im String

7. September 2010 14:41

Natalie hat geschrieben:
Cr4cks hat geschrieben:Jetzt muss ich mir nurnoch ausdenken wie er variabel herausbekommt wie lang der String eigtl ist...

Lies mal die Onlinehilfe (C/SIDE Reference Guide) zu COPYSTR. Wenn du von Pos X bis Ende des Strings kopieren möchtest, dann lass den Bis-Parameter einfach weg.



unglücklich ausgewählt meine Worte... ich meinte nicht den kompletten String sondern nur die Artikelnr... :)

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:44

Mein Vorschlag funktioniert glaub mir 8-)

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:45

christiand hat geschrieben:Probies mal so:

Code:
test := '22#X20011#234';
test := convertstr(test,'#',',');
message(selectstr(2, test));



so ersetze ich doch nur das char "#" mit einem Komma?!

rallnus hat geschrieben:ich würde es so machen:

strg:=DELCHR(strg,'=',' ');

Damit hast du doch die leerzeichen raus.


ich versuchs mal...

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:46

christiand hat geschrieben:Mein Vorschlag funktioniert glaub mir 8-)

Achte mal auf das SELECTSTR, das Christian verwendet - und schlag das mal in der Onlinehilfe nach ;-)

@christiand
Gute Idee, übrigens!

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:46

Nein, der 2te Befehl in der Message selektiert dann anhand des Kommaseparierten Strings den 2ten Wert heraus.

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:48

Danke Natalie :-)

Re: [gelöst] unerwünschte Leerzeichen im String

7. September 2010 14:53

Ach, ihr seid wahre Schätze :) so funktionierts ohne rekursive Funktionen und anderem gespittel. :lol:

Danke :)


---------------
Lösung:

Code:
  Scannfeld := convertstr(Scannfeld,'#',',');
  Artikelnr := SELECTSTR(2, Scannfeld);
  MESSAGE(Artikelnr);



So gibt er mir jetzt, wie ich wollte, nur die reine Artikelnr. aus.