[gelöst] XmlPort - Feldabgrenzer im Text führt zu Fehler

22. Februar 2011 18:09

hallo ich habe ein problem mit xmlports, womit sich vielleicht auch schon andere rumgeärgert haben. also ich habe einen funktionierenden xmlport, der als feldtrenner das semikolon hat (FieldSeparator -> ;) und als feldabgrenzer das anführungszeichen (FieldDelimiter -> ").

soweit ich weiß wird nach csv "standard" der feldabgrenzer verdoppelt, sofern dieser auch innerhalb einer zeichenkette vorkommen soll. genau so macht es auch das programm, dass die csv datei die ich importieren will erzeugt. aus einem "beispieltext" wird in der csv datei also ""beispieltext"". der aufbau der csv datei sieht dann beispielhaft so aus:

Code:
1;"ich bin ein text ohne eigene anführungszeichen";"ich aber ""mit"""
2;"noch mehr text";"jetzt reicht es aber"

der nav xmlport kommt damit nicht klar, für ihn endet in der ersten zeile das dritte feld mit dem anführungszeichen nach dem aber. das habe ich durch eine message im OnAfterAssignVariable schon geprüft. dadurch kracht es an späterer stelle. wie geht man an diese sache ran?


grüße,
daniel
Zuletzt geändert von dr am 23. Februar 2011 14:23, insgesamt 2-mal geändert.

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

22. Februar 2011 18:14

Wir versuchen, das Problem einfach elegant zu umschiffen:
Musst du denn zwingend mit einem (gefüllten) Feldabgrenzer arbeiten?

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

22. Februar 2011 20:01

Wäre csv nicht eher ein DataPort statt eines xmlPorts?
Ein erfahrener Ex-Kollege von mir hat nur Field Seperator mit <TAB> benutzt, und keine Field Delimiter.

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

23. Februar 2011 09:29

Hallo,

zunächst: der RTC kennt keine Dataports, da muss man das gleiche über XML-Ports machen :-(

Aber um das zu lösen bleiben dir nur zwei Möglichkeiten:
  • Das bereitstellende Programm auf einen anderen Feldseparator (z.B. <TAB> oder '|', je nachdem, was in den Daten vorkommt) umzustellen und ohne Feldbegrenzer zu arbeiten (NAV verlangt die vor jedem Feld, CSV nur bei Texten).
  • Du machst das ganze mit einer Codeunit, und schreibst dir eine eigene Split-Routine (es gibt schon ein paar Vorschläge für ähnliche Anforderungen hier im Forum)

Gruß, Fiddi

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

23. Februar 2011 10:21

hallo, danke für eure tipps.

also das ganze wird im rtc realisiert, daher in der tat xmlport. ich muss klären, ob der export an sich bereits mit anderen begrenzern arbeiten kann. wenn das nicht geht werde ich noch mal nach der beschriebenen lösung über eine codeunit suchen. die alternative wäre wohl, dass ich die datei vor dem import über einen anderen aufruf durchgehe und parse und die "problemstellen" behandel.

schade dass nav hier nicht "versteht", dass ein doppelanführungszeichen ein gequotetes anführungszeichen, was man im text haben will, bedeutet.


grüße,
daniel

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

23. Februar 2011 13:02

Schade, das NAV nicht komplett unicode-fähig ist.
Wünsche gibt es viele ;-)

Re: XmlPort - Feldabgrenzer im Text führt zu Fehler

23. Februar 2011 14:26

JanGD hat geschrieben:Wünsche gibt es viele ;-)

tja. so ist das. vielleicht sollten wir einen "schade, dass nav nicht..." thread eröffnen, über die wunsch features abstimmen und die top 20 an ms senden :roll:

der export findet nun übrigens mit pipe als trenner und ohne feldbegrenzer statt.

grüße,
daniel

Re: [gelöst] XmlPort - Feldabgrenzer im Text führt zu Fehler

3. November 2011 14:38

Ich bin auf den Thread gestoßen und möchte noch eine möglich Lösung vorstellen. Also den FieldDelimiter auf <None> stellen. Dann werden die Anführungszeichen mitimportiert. Dann muss natürlich jedes Feld in NAV bearbeitet werden, wofür der folgende Code geeignet ist. Die Lösung ist also je nach Anzahl der Felder nur bedingt sinnvoll.

Code:
ImportField := COPYSTR(ImportField,2,STRLEN(ImportField)-2); //FieldDelimiter wegschneiden
WHILE STRPOS(ImportField,'""') <> 0 DO
  ImportField := DELSTR(ImportField,STRPOS(ImportField,'""'),1); //doppelte Anführungszeichen suchen und eins wegschneiden


Die unteren beiden Zeilen funktionieren natürlich nur einwandfrei, wenn im ImportField nicht mehrere Anführungszeichen hintereinander verwendet werden. Die würden dann auf ein einzelnes zusammengeschrumpft werden.