[gelöst] Probleme beim Schließen einer csv Datei nach Import

Bild Microsoft Dynamics NAV 2017

[gelöst] Probleme beim Schließen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 11:39

Guten Morgen liebe Community,

ich habe folgendes Problem.

Ich lese eine csv Datei aus dem Netzlaufwerk ĂĽber eine Codeunit ein.

Die Datei wird jedoch nicht beendet. Sprich ich kann die Datei anschließend nicht löschen oder umbenennen.

Die Fehlermeldung sagt mir aus, dass die Datei noch von einem anderen Programm verwendet wird. Starte ich einmal den NAV Dienst neu, kann ich wieder auf die Datei zugreifen.

Ich habe jedoch bislang noch keine Ahnung warum das Problem auftritt.
Das Einlesen funktioniert ohne Probleme. Anbei die Codeschnipsel.

Code: Alles auswählen
Datei.TEXTMODE(FALSE);
Datei.OPEN(Explorer.Path + '\' + Explorer.Name)

.....


Datei.CLOSE;

Zuletzt geändert von simon123 am 21. Juli 2017 17:49, insgesamt 1-mal geändert.
simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon fiddi » 21. Juli 2017 12:11

Hallo,

welche NAV- Version nutzt du NAV 2017 oder NAV 5 ?

Bei letzterer ist das bekannt. :wink:

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 12:13

Benutze NAV17...
simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon shove » 21. Juli 2017 12:21

Hast du mal gestet ob der CLOSE Befehl auch ausgefĂĽhrt wird?
Entweder per Breakpoint oder per MESSAGE?

Im Falle eines EXITs oder Bedingungen könnte es sein, dass der Code garnicht bis zum CLOSE ausgeführt wird.
GruĂź
Stefan
shove
 
Beiträge: 41
Registriert: 2. März 2017 09:11
Realer Name: Stefan
Arbeitsort: Bonn
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: Seit 2013

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon pjung » 21. Juli 2017 12:57

Du könntest auch mal das ganze versuchen über die CSV Buffer Table zu realisieren.
pjung
 
Beiträge: 89
Registriert: 10. Februar 2016 09:55

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 13:09

Ich glaube ich konnte das Problem lokalisieren.

Es handelt sich um eine Leere Zeile am Ende der csv-Datei. Lösche ich diese raus. Läuft die Codeunit ohne Probleme durch.

Jetzt muss ich nur noch eine Idee finden wie ich die entfernen kann...

Bzw. gibt es hier eine Möglichkeit das NAV das erkennt?
simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon sweikelt » 21. Juli 2017 13:29

zeig doch mal den Schnippsel, wie du die Datei liest/verarbeitest
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 13:34

Code: Alles auswählen
 Datei.TEXTMODE(FALSE);

    EOF := FALSE; // Dateiende (End of File)
    EOL := FALSE; // Zeilenende (End of Line)
    IF (COPYSTR(Explorer.Path,STRLEN(Explorer.Path),1) <> '\') THEN
      Datei.OPEN(Explorer.Path + '\' + Explorer.Name)
    ELSE
      Datei.OPEN(Explorer.Path + Explorer.Name);

     WHILE NOT EOFReached DO BEGIN
     .....

     SetNextLine; // Nächste Zeile in der Datei ansteuern
    END;


EOFReached() : Boolean

p_CarriageReturn := 13;
p_LineFeed := 10;
p_InpChar := 32;
p_StartPos := Datei.POS;
EOF := Datei.READ(p_InpChar) <= 0;
Datei.SEEK(p_StartPos);

IF NOT EOF THEN BEGIN
  p_InpChar := 32;
  WHILE (Datei.READ(p_InpChar) > 0) AND (p_InpChar IN [p_CarriageReturn, p_LineFeed]) DO;
  EOF := (p_InpChar IN [p_CarriageReturn, p_LineFeed]);
  Datei.SEEK(p_StartPos);
END;
EXIT(EOF);



SetNextLine()

p_CarriageReturn := 13;
p_LineFeed := 10;
p_InpChar := 32;
WHILE (Datei.READ(p_InpChar) > 0) AND (NOT (p_InpChar IN [p_CarriageReturn, p_LineFeed])) DO;
IF (p_InpChar IN [p_CarriageReturn, p_LineFeed]) THEN BEGIN
  Datei.SEEK(Datei.POS - 1);
  IF EOFReached THEN
    Datei.SEEK(Datei.LEN - 1) // = EOF-Position
  ELSE BEGIN
    WHILE (Datei.READ(p_InpChar) > 0) AND (p_InpChar IN [p_CarriageReturn, p_LineFeed]) DO;
    Datei.SEEK(Datei.POS - 1);
    EOL := FALSE; //End of Line
  END;
END ELSE
  EOF := TRUE;







simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon enh » 21. Juli 2017 13:53

Warum verwendest du keinen XMLport zum Importieren der Datei?
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 13:59

Weil wir ein Update durchführen und ich natürlich vermeiden möchte alles neu Programmieren zu müssen...

In der aktuellen Version funktioniert dies ja auch ohne Probleme...
simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon jglathe » 21. Juli 2017 17:09

Du kannst den Import so anpassen dass die Leerzeile gelesen wird und Du tatsächlich EOF erreichst. Oder, dass wenn Du den "lesenden" Teil des Imports verlässt immer das CLOSE machst. Beides würde m.E. gehen
jglathe
 
Beiträge: 496
Registriert: 5. Mai 2006 08:20
Wohnort: Falkensee
Realer Name: Jens Glathe
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: blau..2018

Re: Probleme beim SchlieĂźen einer csv Datei nach Import

Beitragvon simon123 » 21. Juli 2017 17:49

Ich habe jetzt die Codeunit in einen XML Port umgeschrieben. Damit funktioniert alles ohne Probleme. War zwar etwas FleiĂźarbeit da es ĂĽber 100 Werte je Zeile sind ist aber glaube ich die einfachere Variante.

Vielen Dank.
simon123
 
Beiträge: 113
Registriert: 12. Januar 2011 11:20
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 5.0 SP1

Re: [gelöst] Probleme beim Schließen einer csv Datei nach Im

Beitragvon fiddi » 21. Juli 2017 18:42

Hallo,

ich habe fĂĽr solche Zwecke einen Muster- Report (siehe Anhang)

Der bietet im wesentlichen die gleiche Funktionalität wie der gute alte DataPort und verhält sich auch (fast) genauso.
Wer nicht gerade Dateien mit fester Satzlänge ohne Zeilenvorschub, bzw. Dateien mit sehr langen Zeilen importiert, der kommt damit ohne Anpassungen der internen Abläufe klar.

Wenn nötig, kann man den Code aber auch in eine Codeunit packen, wenn der Dateiname klar ist, und das ganze im Hintergrund laufen soll und kann.

Wer Dateilisten abarbeiten muss, der sollte die Funktionen "GetClientDirectoryFilesList" bzw. "GetServerDirectoryFilesList" aus der Codeunit 419 benutzen, die funktionieren wesentlich stabiler als die Tabelle "File".

Wie es auch sehr sinnvoll ist fĂĽr das Dateihandling die Funktionen aus der Codeunit 419 zu benutzen.

GruĂź Fiddi
Dateianhänge
Report50014.txt
Dataport Report
(5.9 KiB) 98-mal heruntergeladen
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell


ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast