Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 13:37

Hallo zusammen,

Ich habe folgendes Problem. Aus einer Fremdanwendung erhalte ich eine Textdatei mit folgendem exemplarischen Aufbau:

01.01.2018,"Meier, Hans",01.01.2019
01.01.2018,"Müller, Hans",01.01.2019

Zur Einlesung möchte ich eigentlich die Datenaustauschdefinitionen (variabler Text, Komma getrennt) verwenden. Grundsätzlich funktioniert das auch sehr gut, aber ...

NAV erkennt nicht, dass das Komma zwischen Nach- und Vorname kein Feldseparator ist und bricht mit dem Fehler ab, dass "Hans" kein Datum ist

Irgendwie müsste ich da vermutlich einen Parser davorschalten, der mir den Text zwischen den Anführungszeichen gesondert extrahiert. Wie kriege ich den so etwas am elegantesten hin?

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 14:53

Ist das ein einmaliger/manueller Import oder muss die automatisch verarbeitet werden?
Für einen manuellen könnte man die Importfunktionen von Excel nutzten, damit die Datei einlesen und dann direkt wieder als CSV abspeichern. Dann hat man ; als Trennzeichen. Falls das Semikolon nicht in den Feldern vorkommt, hat man dann keine Probleme mehr.

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 14:58

Kowa hat geschrieben:Ist das ein einmaliger/manueller Import oder muss die automatisch verarbeitet werden?
Für einen manuellen könnte man die Importfunktionen von Excel nutzten, damit die Datei einlesen und dann direkt wieder als CSV abspeichern. Dann hat man ; als Trennzeichen. Falls das nicht in den Feldern vorkommt, hat man dann keine Probleme mehr.


Nein, leider nicht. Soll mehrmals im Monat vom Anwender gemacht werden. Somit funktioniert der "Umweg" über Excel leider nicht bzw. ist nicht praktikabel.

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 15:21

Bitte keine Vollzitate!
Alternativ kann man auch mit PowerShell vorher das Trennzeichen ändern. Das Skript muss der Anwender natürlich ausführen dürfen. Das erzeugt eine neue Datei mit Semikolon als Trennzeichen.
Hier für UTF-8-Dateien, Pfade und Encoding ggf. anpassen
Code:
Import-Csv -Delimiter "," -Path C:\temp\importdatei.txt -Encoding UTF8|Export-Csv -Delimiter ";" -Path C:\temp\importdatei2.txt -NoTypeInformation -Encoding UTF8

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 15:31

Kowa hat geschrieben:Alternativ kann man auch mit PowerShell vorher das Trennzeichen ändern.

Noch besser natürlich: dafür sorgen dass in den Feldinhalten das Trennzeichen nicht erst enthalten ist. Also praktisch an der Quelle.

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 15:36

Hallo,

wenn du dich ein wenig mit NAV- Programmierung auskennst, könntest du es damit http://www.msdynamics.de/viewtopic.php?f=74&t=34117#p128545 probieren. Du müsstest nur die Split- Funktion etwas intelligenter machen.

Gruß Fiddi

Re: Feldseparator in Datenaustauschdefinitionen

22. Februar 2018 16:14

Markus Merkl hat geschrieben:Noch besser natürlich: dafür sorgen dass in den Feldinhalten das Trennzeichen nicht erst enthalten ist. Also praktisch an der Quelle.

Das, was da kommt, ist leider für CSV von der Internet Engineering Task Force durchaus mal so locker definiert worden, wenn auch nicht empfehlenswert.
http://www.ietf.org/rfc/rfc4180.txt