Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von kaim77 (Specialist / 200 / 0 / 0 ) »
Guten Tag,

wir habe einen Report, der csv-Dateien Aufruft und diese verarbeitet. Leider enthält die neue csv-Datei Zeichen, die vorher gelöscht werden müssen. Den Report, der die csv-Datei verarbeitet, möchte ich nicht ändern. Wie kann ich vorgehen? Kann ich einen neuen Report schreiben, der die csv-Datei ändert und anschließend den Report zur Verarbeitung aufruft.

Viele Grüße
Kaim

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Was sind das denn für Zeichen die gelöscht werden müssen?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50


Re: Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Hochkommas (doppelte Anführungszeichen) werden im CSV dazu benutzt um Text zu maskieren, der entweder das Spalten oder Zeilentrennzeichen, beinhaltet. Wenn ein Hochkomma alleine vorkommt, handelt es sich um einen Fehler beim Erstellen des CSV, weil einzelne Hochkommas immer escaped werden müssen:
https://stackoverflow.com/questions/178 ... ote-in-csv

Eigentlich sollte jeder bessere CSV Export und Import damit umgehen können. Wenn nicht, ist das ein Fehler der vom Softwarehersteller korrigiert werden muss.

Hier hab ich vor einiger Zeit auch meine Meinung zum Standard CSV Export von SAP hinterlassen und warum der Funktionsbaustein nicht verwendet werden sollte:
https://www.abapforum.com/forum/viewtop ... 18&t=25508
Dasselbe gilt übrigens auch für das Gegenstück TEXT_CONVERT_CSV_TO_SAP.

Wo liegt nun dein Problem?
Ist die CSV Datei "fehlerhaft"? --> Der Export muss korrigiert werden.
Lässt sich die Datei nicht importieren? --> Schreib deinen eigenen Import und vergiss den von der SAP.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Es gibt da auch noch die Klasse CL_RSDA_CSV_CONVERTER. Die sollte mit den Hochkommas umgehen können:
https://www.abapforum.com/forum/viewtopic.php?t=23174
Nur muss dazu, wie gesagt, die CSV auch korrekt aufgebaut sein.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von kaim77 (Specialist / 200 / 0 / 0 ) »
Hallo,
ich habe mir vorgenommen, dass die Datei unabhängig von dem anderen Report zuerst geändert wird.
Dazu öffne ich die Datei, lese in eine Internet Tabelle ein und möchte diese in die Datei wieder einlesen.

Jetzt wird die CSV Datei eingelesen, die Zeichen " geändert und dann der Inhalt eingehängt.

OPEN DATASET file FOR UPDATE IN TEXT MODE ENCODING DEFAULT.
DO.
READ DATASET file INTO rec.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND rec.
ENDDO.
DELETE rec INDEX 1.
REPLACE ALL OCCURRENCES OF '"' IN TABLE rec WITH space IN CHARACTER MODE.

LOOP AT rec INTO gt_exec.
TRANSFER gt_exec TO file.
ENDLOOP.
CLOSE DATASET file.

Wie schaffe ich es, dass nur das geänderte in die Datei eingefügt wird?

Danke für die Tipps
Kaim

Re: Ändern eine csv-Datei mit anschließendem Aufruf eines Reports

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Das Problem ist, dass du zuerst Lesen und dann Schreiben willst. Der Dateizeiger wird beim Lesen an das Zeilenende gesetzt. Willst du dann gleich darauf Schreiben wird der neue Inhalt hinten darangefügt bzw. überschrieben.

Am einfachsten ist, zuerst die Datei komplett einzulesen (OPEN DATASET ... FOR INPUT ... + READ DATASET), zu löschen (DELETE DATASET ...) und dann neu zu erstellen (OPEN DATASET ... FOR OUTPUT ... + TRANSFER).

Alternativ kann man mit SET DATASET/GET DATASET den Dateizeiger manipulieren um sich das Löschen zu sparen aber das wird dann echt tricky. Vorallem weil man die Zeilenendezeichen (CR und/oder LF) mitberücksichtigen muss und bei unterschiedlichen Zeilenlängen Gefähr läuft etwas ungewollt zu überschreiben.

Und nochmal:
Das doppelte Hochkomma ist KEIN fehlerhaftes Zeichen für CSV, wenn man es korrekt maskiert. Im Gegenteil, man braucht das Zeichen um den Spaltentrenner maskieren zu können. Wenn du es also ungeprüft in allen Zeilen entfernst kann es sein, dass man die CSV Datei nicht mehr korrekt einlesen kann bzw. sich einzelne Zellen/Spalten verschieben.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1214
Views
Dynamischer Aufruf von Reports
von fba9901 » 20.10.2014 10:10 • Verfasst in ABAP® Core
3
Antw.
2616
Views
Control Framework - Aufruf von Reports und Transaktionen
von Ingo » 24.04.2015 07:21 • Verfasst in Dialogprogrammierung
7
Antw.
4462
Views
Reports zum Löschen unbenötigter Reports
von Tunoto » 28.02.2006 16:45 • Verfasst in ABAP® für Anfänger
0
Antw.
1157
Views
Reports IS-U
von addi » 28.09.2009 09:14 • Verfasst in Sonstige Module

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.