Dataport einlesen von Daten in Tabelle

21. November 2016 08:59

Hallo,

bin zurzeit in der Ausbildung als NAV Entwickler somit noch relativ am Anfang. Nun stehe ich aber vor einem Problem und zwar soll ich einen Dataport bauen der verschiedene Daten aus einer .CSV Datei einlesen soll, dies funktioniert bis 97% und dann Erfolgt ein Abbruch mit der Meldung 'XX,XX C' ist kein Gültiges Datum.

Wobei ich denke das er beim Einlesen eine Zeile verrutscht und somit versucht den Betrag in das Datumsfeld hinzuzufügen. Wobei dies nicht möglich wäre.
Wie kann ich nun rausfinden welches die Betroffene Zeile ist, habe das ganze über C/AL probiert zu Lösen dennoch bis jetzt kein Erfolg.

Code:
xPZN := '';
xlang:='';
xzahl:='';
xEinheit:='';
xtxEinstufung:='';
AdrID:=0;
xFirmename:='';
xtxmwst:='';
xApu:='';
xApoEk:='';
xApoVk:='';
xDatum:=0D;

Integer - OnAfterImportRecord()
ApoPH.INIT;
ApoPH.PZN := xPZN;
ApoPH.Langname := xlang;
ApoPH.Zahl := xzahl;
ApoPH.Einheit := xEinheit;
ApoPH.txEinstufung := xtxEinstufung;
IF STRPOS(AdrIDText,'AdrID')<>0 THEN CurrDataport.SKIP
  ELSE EVALUATE(AdrID,AdrIDText);
ApoPH.AdrID_Anbieter := AdrID;
ApoPH.Firmenname := xFirmename;
ApoPH.txMwSt := xtxmwst;
//ApoPH.GDatumPreise:= xDatum;

EVALUATE(ApoPH.ApU,EntSpace(xApu));
EVALUATE(ApoPH.Apo_Ek,EntSpace(xApoEk));
EVALUATE(ApoPH.Apo_Vk,EntSpace(xApoVk));

ApoPH.INSERT;

Integer - OnPostDataItem()

EntSpace(Text : Code[40]) test : Text[100]
EXIT(COPYSTR(Text,1,STRPOS(Text,' ')-1));



Das Einlesen der Daten funktioniert nach mehrmaligen Tests dennoch hängt er ab einer bestimmten Zeile wie kann ich mir nun diese eine betroffene Zeile ausgeben lassen in C# gibt es sowas wie Try & Catch zB.

NAV Version 2009 (6.0 Classic)

Grüße,

Pascal

Re: Dataport einlesen von Daten in Tabelle

21. November 2016 09:21

Wenn du die csv-Datei im Texteditor öffnest und nach der Textstelle suchst, über die er stolpert: findest du sie da nicht?

Re: Dataport einlesen von Daten in Tabelle

21. November 2016 09:23

Herzlich Willkommen bei uns!
Ein Verrutschen beim Einlesen entsteht dadurch, dass irgendein einzulesendes "Feld" in der CSV-Datei ein Zeichen enthält, das im Dataport als Feld-Trennzeichen (Spaltenversatz) oder Datensatz-Trennezichen (Zeilenversatz) definiert ist. Die Trennzeichen steuerst du ja in deiner Dataport-Einrichtung.
Hier muss der Export ggf. korrigiert werden, damit "verbotene" Zeichen nicht in die Daten rutschen, oder man einigt sich export- und importseitig auf andere Trennzeichen, die garantiert nicht anderweitig verwendet werden.

Re: Dataport einlesen von Daten in Tabelle

21. November 2016 10:50

Leider finde ich diese Stelle nicht als "Field Separator" ist ";" eingegeben.
Bestehend aus 8 Spalten und knapp 500.000 Zeilen.

Kann sein das der Seperator 2mal hintereinander vorkommt und er deshalb stolpert aber die genau

Somit ist es mir leider mit dem Texteditor nicht möglich dadurch die Zeile zu finden.
Benötige eine Zeilenangabe leider dafür.

Re: Dataport einlesen von Daten in Tabelle

21. November 2016 11:00

PascalRoman hat geschrieben:Kann sein das der Seperator 2mal hintereinander vorkommt und er deshalb stolpert

Nö, das sagt lediglich aus, dass ein Feld leer bleibt und dafür das nächste anfängt. Pro Zeile sollte die Anzahl an Semikolons aber gleich sein ....

Somit ist es mir leider mit dem Texteditor nicht möglich dadurch die Zeile zu finden.
Kommt denn der Inhalt laut Fehlermeldung so oft vor, dass du danach ebenfalls nicht suchen kannst?
Du hast selber gesagt, es kommt ungefähr bei 97% vor, also sehr weit hinten in der Textdatei.

Re: Dataport einlesen von Daten in Tabelle

21. November 2016 12:19

PascalRoman hat geschrieben:Leider finde ich diese Stelle nicht als "Field Separator" ist ";" eingegeben.

So etwas ist meist schneller über einen CSV-Import in Excel zu finden, dann verrutscht der Spalteninhalt gegenüber den richtigen Zeilen an der Fehlerstelle.