[Gelöst] Erste Zeile einer csv ignorieren

27. Februar 2009 11:28

Hallo,

ich möchte über einen Dataport eine csv-Datei importieren.
In der Datei steht in der ersten Zeile die Feldbezeichnung.
Gibt es die möglichkeit, dass beim Import die erste Zeile ignoriert wird?

Merci
Zuletzt geändert von winkelsbr am 27. Februar 2009 15:19, insgesamt 1-mal geändert.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 11:56

Geht im OnBeforeImportRecord oder OnAfterImportRecord sowas wie
Code:
If not FirstLineRead then
  begin
    FirstLine:=true;
    CurrDataport.Skip;
  end;
?

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 12:05

Also, wenn es möglich ist, mache ich es so: Wenn der Primärschlüssel übergeben wird, und nur ein Modify passiert und kein Insert, dann prüfe ich ob ich den Satz bekomme oder nicht. Wenn nicht dann SKIP.

Wenn du aber Sätze neu anlegen willst, funktioniert das Ganze nicht. Was du auch machen könntest: Die Feldnamen sind wahrscheinlich Text und der Primärschlüssel Numerisch. Das überprüfen ist oft sinnvoll.

Wenn du wirklich NUR die erste Zeile überspringen willst:
Eine boolsche Variable auf True setzen. Für jede Zeile prüfen, ob True. Wenn True, dann auf False setzen und dann einen SKIP. Mehr ist es nicht.

EDIT: Schon wieder zu langsam. Das kommt davon, wenn man kurrzeitig von seinem Platz geht :P

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 12:31

Hallo McClane,
unter NAV 3.6 kann ich die beiden Variablen (FirstLineRead;FirstLine) nicht finden!

@Sebastian
Denn eigentlichen Aufbau der csv-Datei kann ich nicht beeinflussen! Es findet ein INSERT statt.
Das erste Feld ist vom Typ Integer (gleichzeitig PK), wobei in der csv-Datei der Text "laufende Nummer" enthält.
Jetzt weiß ich nicht, wie ich das Abfragen soll.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 12:52

Hab mich ja auch vertippt :wink:
Code:
If not FirstLineRead then
  begin
    FirstLineRead:=true;
    CurrDataport.Skip;
  end;

FirstLineRead musst du als bool-Variable anlegen.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 13:00

Hallo McClane,

ich habe den Code jetzt in den Trigger "OnBeforeImportRecord()" geschrieben.
Er bringt mir aber gleich eine Fehlermeldung, da das erste Feld in der Tabelle vom Typ Integer ist, jedoch die csv-Datei eine Feld vom Typ Text enthält.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 13:18

winkelsbr hat geschrieben:ich habe den Code jetzt in den Trigger "OnBeforeImportRecord()" geschrieben.
Er bringt mir aber gleich eine Fehlermeldung, da das erste Feld in der Tabelle vom Typ Integer ist, jedoch die csv-Datei eine Feld vom Typ Text enthält.

Mist. Ich hatte gehofft, das klappt :-(

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 13:40

Hallo McClane,

trotzdem Danke. Vielleicht fällt mir ja noch was ein.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 14:00

Du sollst auch nicht die CSV bearbeiten.
Machs doch so: Hau AutoUpdate und AutoSave als Property raus.
Nimm statt den Felder in der Tabelle Text-Variablen. Für jede Zeile überprüfst du den Satz auf bestimmte Merkmale. Zum Beispiel darf das Primärfeld nur Integer sein (überprüf das mit EVALUATE). Ist der Satz nicht korrekt: SKIP. Jetzt dann halt alle Felder füllen. Aufpassen: INSERT, INIT und Modifies müssen selbst programmiert werden!

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 14:29

Hallo Sebastian,

jetzt stehe ich aber auf dem Schlauch!
Sebastian Pfliegel hat geschrieben:Hau AutoUpdate und AutoSave als Property raus.

was meinst Du damit? Wo kann ich das als Property raushauen?

Sebastian Pfliegel hat geschrieben:Zum Beispiel darf das Primärfeld nur Integer sein (überprüf das mit EVALUATE)

Ich habe im Trigger folgendendes geschrieben:
Code:
IF EVALUATE(Tabelle."Lfd-Nr",'Laufende Nummer') THEN
   CurrDataport.SKIP;

Der Text "Laufende Nummer" steht in der ersten Zeile an erster Stelle. Er bringt mir trotzdem noch die Fehlermeldung.

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 14:30

winkelsbr hat geschrieben:Gibt es die möglichkeit, dass beim Import die erste Zeile ignoriert wird?

http://www.navision24.de/trickkiste/dat ... ingen.html

Re: Erste Zeile einer csv ignorieren

27. Februar 2009 15:02

Hallo Natalie,

wie immer die Rettung!

Schönes Wochenende Euch allen.

Erste Zeile einer csv ignorieren - Fehler "Datei nicht geöff

9. September 2009 13:18

Hallo!

Ich wollte das dann auch mal versuchen.
Leider bekomme ich beim import dann folgende Fehlermeldung:
nicht geöffnet.JPG

Bitte beachtet:
Ich bin in Sachen Programmierung noch ein absoluter DUMMIE!

Deswegen hier mein kompletter Quelltext:
Code:
OBJECT Dataport 50032 Stockkeeping Unit  SS Quantity
{
  OBJECT-PROPERTIES
  {
    Date=09.09.09;
    Time=12:15:03;
    Modified=Yes;
    Version List=PA008;
  }
  PROPERTIES
  {
    CaptionML=[DEU=Lagerhaltungsdaten SB/Meldebestand;
               ENU=Stockkeeping Unit SS Quantity];
    FieldStartDelimiter=<None>;
    FieldEndDelimiter=<None>;
    FieldSeparator=[;];
    RecordSeparator=<NewLine>;
    DataItemSeparator=<NewLine>;
    OnPreDataport=BEGIN
                    IF CurrDataport.IMPORT THEN BEGIN
                      LineCount:=1;
                      REPEAT
                        CurrFile.READ(Character);
                        IF Character=10 THEN
                          LineCount:=LineCount-1;
                      UNTIL LineCount=0;
                    END;
                  END;

  }
  DATAITEMS
  {
    { PROPERTIES
      {
        DataItemTable=Table2000000026;
        DataItemTableView=SORTING(Number)
                          WHERE(Number=CONST(1));
      }
      FIELDS
      {
        {      ;     ;''                  ;Format=Artikelnr. }
        {      ;     ;''                  ;Format=Loagerortcode }
        {      ;     ;''                  ;Format=Sicherheitsbestand }
        {      ;     ;''                  ;Format=Bestellzyklus }
        {      ;     ;''                  ;Format=Beschaffungszeit }
      }
       }
    { PROPERTIES
      {
        DataItemTable=Table5700;
        DataItemVarName=Lagerhaltungsdaten;
        ReqFilterFields=Location Code;
      }
      FIELDS
      {
        {      ;     ;"Item No."           }
        {      ;     ;"Location Code"      }
        {      ;     ;"Safety Stock Quantity" }
        {      ;     ;"Reorder Cycle"      }
        {      ;     ;"Lead Time Calculation" }
      }
       }
  }
  REQUESTFORM
  {
    PROPERTIES
    {
      Width=9020;
      Height=3410;
    }
    CONTROLS
    {
    }
  }
  CODE
  {
    VAR
      GM@1140000 : Codeunit 11501;
      Character@1140002 : Char;
      LineCount@1140001 : Integer;

Was sagt ihr dazu?

Gruß
Heike
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [Gelöst] Erste Zeile einer csv ignorieren

9. September 2009 13:27

Dieser Quelltext

Code:
IF CurrDataport.IMPORT THEN BEGIN
  LineCount:=1;
  REPEAT
    CurrFile.READ(Character);
    IF Character=10 THEN
      LineCount:=LineCount-1;
  UNTIL LineCount=0;
END;


gehört in einen anderen Trigger. OnPreDataItem. In OnPreDataport ist die zu lesende Datei noch gar nicht vom Dataport geöffnet worden.

Re: [Gelöst] Erste Zeile einer csv ignorieren

9. September 2009 13:31

Da dein Code (Objektexport) nicht vollständig ist, kann ich nur mutmaßen, dass du in den falschen Trigger geschrieben hast? Du musst in den OnPreDataItem schreiben. Im OnInitReport wäre es zu früh, dort ist die Datei nämlich noch gar nicht geöffnet.

[EDIT:] Natalie war mal wieder schneller ...