[Gelöst] Zeile aus Importdatei an zweite Datei anhängen

12. Februar 2008 17:57

Ein gewöhnlicher Dataport liest zeilenweise eine Importdatei aus.
Unter bestimmten Bedingungen möchte ich, dass die aktuell ausgelesene Zeile unverändert in eine zweite Datei geschrieben wird. Wie stelle ich das an?

CurrFile.READ(Variable) liefert mir den gesamten Dateiinhalt statt nur die aktuelle Zeile. Die Syntax sieht bisher (zusammengefasst) so aus, DataItem OnAfterImportRecord:

Code:
// ---- einmalig
IF FILE.EXISTS(lDateipfad) THEN
  FILE.ERASE(lDateipfad);
Fehlerdatei.TEXTMODE(TRUE);
Fehlerdatei.WRITEMODE(TRUE);
Fehlerdatei.CREATE(lDateipfad);
Fehlerdatei.OPEN(lDateipfad);

// ---- für jede hinzuzufügende Zeile
CurrFile.READ(lZeilentext);
Fehlerdatei.WRITE(lZeilentext);

// --- einmalig am Ende, wenn überhaupt erstellt/gefüllt
Fehlerdatei.CLOSE;


Ist denn der Rest wenigstens richtig?
Zuletzt geändert von Natalie am 13. Februar 2008 14:06, insgesamt 1-mal geändert.

13. Februar 2008 09:13

warum willst du das ganze zeilenweise kopieren?
alternativ kannst du doch die ganze Datei (file.copy) kopieren.

13. Februar 2008 10:13

tba hat geschrieben:warum willst du das ganze zeilenweise kopieren?

Ich glaube, weil sie nicht jede Zeile kopieren möchte, sondern nur einige die gewissen Bedingungen erfüllen.

Gruß, Marc

13. Februar 2008 10:30

Marc Teuber hat geschrieben:
tba hat geschrieben:warum willst du das ganze zeilenweise kopieren?

Ich glaube, weil sie nicht jede Zeile kopieren möchte, sondern nur einige die gewissen Bedingungen erfüllen.

Gruß, Marc

Exakt.
Hintegrund:
Es kann sein, dass einige der Importzeilen unvollständige Daten erhalten. Solche Zeilen werden nicht nach Navision importiert, sondern beim Importvorgang übersprungen.
Wir möchten aber sehen, welche Zeilen übersprungen worden sind. Daher werden solche Zeilen in eine andere Textdatei geschrieben.

Könnt ihr mir jetzt sagen, wie ich das hinbekomme ...?

13. Februar 2008 10:57

Spontan fällt mir da nur eine indirekte lösung ein.
Du "merkst" dir die fehlerhaften Zeilen (nummern) über eine hochzählende Integervariable im Array oder Temprecord.
Am Ende des Dataportes, liest du die Datei nochmal mit Filemethoden Zeilenweise und kopierst Dir die "gemerkten" Zeilen (identifiziert über die Nummer) in eine neue Datei.

13. Februar 2008 11:28

tba hat geschrieben: und kopierst Dir die "gemerkten" Zeilen (identifiziert über die Nummer) in eine neue Datei.
^
Und wie gehts das? Hast du ein Codebeispiel dafür, wie ich eine bestimmte Zeile auslese?

13. Februar 2008 12:31

Du liest nachwievor alle Zeilen der Datei ein, schreibst aber nur bestimmte zurück.

anhand der Bedingung im Bsp: i = 2 (hier solltest du auf deine Temptabelle) zugreifen, entscheidest du ob geschrieben wird oder nicht.

Code:
file1.OPEN('c:\test2.txt');
file1.TEXTMODE(TRUE);
file2.CREATE('c:\test3.txt');
file2.TEXTMODE(TRUE);
WHILE NOT (file1.POS = file1.LEN) DO BEGIN
  i += 1;
  file1.READ(Zeile);
  IF i = 2 THEN
    file2.WRITE(Zeile);
END;
file2.CLOSE;

13. Februar 2008 12:48

Danke, werd ich ausprobieren :-)