File lesen

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

File lesen

Beitrag von Handeglo (ForumUser / 36 / 0 / 0 ) »
Hallo Zusammen,

Ich möchte gerne eine einfache .csv in eine ITAB rein laden. Von der ITAB aus dann die Inhalte auf dem Bildschirm ausgeben ...
wie gehe ich den vor?


gruss

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
FuBa GUI_UPLOAD

Read Dataset

Beitrag von daniel.kehrer (ForumUser / 8 / 0 / 0 ) »
wenns vom Server aus ist dann schau mal in der Doku nach READ DATASET

Beitrag von Handeglo (ForumUser / 36 / 0 / 0 ) »
das liegt auf dem Lokalen Rechner...
ich wollte die Vorgehensweise !!!!!
wie gehe ich vor?

Beitrag von nikibert (ForumUser / 78 / 4 / 0 ) »
Moin,
stellt sich die Frage wie die .csv aufgebaut ist. Bequemerweise ersetze ich meistens die Trennungen (oft ; ) mit einem Tab und dann kann man den FuBa GUI_UPLOAD nutzen ohne danach den upload noch zu bearbeiten, da der FuBa nur Trennungen mit TAB automatisch meistert.

Als erstes deklarierst Du deine interne Tabelle mit genau den gleichen Spalten wie die .csv Datei.

Selektionsbildschirm schreiben mit f4 Hilfe für den Upload zwecks Pfadhilfe

Dann rufst du den FUBA auf.
z.B.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = pfad als String
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = itab_upload
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.

Danach einfach die interne Tabelle mittels write ausgeben.
Wenns schön haben willst halt mit dem ALV_Grid

Das war es schon.

Gruß nikibert

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

Selektionsbildschirm mit F4 für Pfadhilfe ist nicht notwendig.

Da gibt es doch die pfiffige Dialogbox mit allem drum und dran.

Code: Alles auswählen.

  call method CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    exporting
      WINDOW_TITLE            = L_TITLE
      DEFAULT_EXTENSION       = 'CSV'
     DEFAULT_FILENAME        = M_FILENAME
*      file_filter             = cl_gui_frontend_services=>filetype_text
*     WITH_ENCODING           =
      INITIAL_DIRECTORY       = M_FILEPATH
      MULTISELECTION          = 'X'
    changing
      FILE_TABLE              = LT_FILE
      RC                      = L_RETURN
*     USER_ACTION             =
*     FILE_ENCODING           =
    exceptions
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      others                  = 5.
hinterher muß man noch rauskriegen, in welchem Pfad die Leute rumgesusurft sind:

Code: Alles auswählen.

* Pfad holen
  call method CL_GUI_FRONTEND_SERVICES=>GET_UPLOAD_DOWNLOAD_PATH
    changing
      UPLOAD_PATH                 = M_FILEPATH
      DOWNLOAD_PATH               = L_DOWNLOADPATH
*  EXCEPTIONS
*    cntl_error                  = 1
*    error_no_gui                = 2
*    not_supported_by_gui        = 3
*    gui_upload_download_path    = 4
*    upload_download_path_failed = 5
*    others                      = 6
          .
  if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.
und dann baue ich immer noch die Pfade vor die Dateinamen:

Code: Alles auswählen.

 if L_RETURN > 0.
    loop at LT_FILE assigning <LT_FILE>.
* echten Dateinamen herausfinden
      split <LT_FILE>-FILENAME at '\' into table LT_RESULT.
      describe table LT_RESULT lines L_LINES.
* Wenn alles in einem gelandet ist, nochmal versuchen
      if L_LINES = 1.
        split <LT_FILE>-FILENAME at '/' into table LT_RESULT.
      endif.
* ist überhaupt etwas vorhanden
      describe table LT_RESULT lines L_LINES.
      if L_LINES > 0.
* Letztes Stück ist der Dateiname
        read table LT_RESULT assigning <LT_RESULT> index L_LINES.
        if <LT_RESULT> is initial.
          raise NO_FILE.
        endif.
* ab in die Namenstabelle
        append initial line to ET_FILE assigning <ET_FILE>.
        <ET_FILE>-FILENAME = <LT_RESULT>.
        M_FILENAME = <LT_RESULT>.
* Pfad aus der "Abholung" des Pfades
        <ET_FILE>-FILEPATH = M_FILEPATH.
      else.
        raise NO_FILE.
      endif.
    endloop.
  else.
    raise NO_FILE.
  endif.
Und wenn man dann so einen Dateinamen hat, muß man ihn hochladen:

Code: Alles auswählen.

        call method CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
          exporting
            FILENAME                = L_FULL_FILENAME
*      filetype                = 'ASC'
*      HAS_FIELD_SEPARATOR     = SPACE
*      HEADER_LENGTH           = 0
            READ_BY_LINE            = 'X'
*      DAT_MODE                = SPACE
*      CODEPAGE                = SPACE
*      IGNORE_CERR             = ABAP_TRUE
*      REPLACEMENT             = '#'
          importing
            FILELENGTH              = L_FILE_LENGTH
*      HEADER                  =
          changing
            DATA_TAB                = T_BDATARAW
          exceptions
            FILE_OPEN_ERROR         = 1
...
            others                  = 19
                .
        if SY-SUBRC > 0.
          raise UPLOAD_FAILED.
        endif.
Und dann lasse ich jede Tabellenzeile auseinandernehmen:

Code: Alles auswählen.

data: et type table of string.
  split I_BDATARAW at I_SEPARATOR into table ET.
und jetzt kann man ganz einfach mit

Code: Alles auswählen.

field-symbols <et> like line of et.

read table et assigning <et> index SPALTENNUMMER.
....
jedes Feld einzeln bearbeiten.


Wir haben gerade so einen Uploader, Splitter und Bucher geschrieben.

Statt 6 oder 7 Batchinput-Schnittstellen von externen Systemen ins FI gibt es ein Framework mit Oberfläche (Buchungspool) das alle möglichen hochgeladenen Dateien verwaltet ohne sich für den Inhalt zu interessieren.
(Datenhaltung im SAP, die PC-Files kann man nach dem Upload löschen.)

Für beliebig viele "Buchungstypen" braucht man nur noch das jeweilige "Entfuselungsmodul" und das "FI-Buchungs-Modul"(Ansteuerung der Bapis) schreiben und im Customizing einhängen. Meistens reicht sogar ein einziges Buchungsmodul für fast alle Buchungen.

Belegarten, Defaultkonten, Debitoren, Kreditoren, Spaltenanzeige alles Customizbar ...

Hochladen, manuell modifizieren, freigeben, stornieren, wiederholen, splitten, rote, gelbe, grüne Bubbles, Statusiconen, Buchungsprotokoll, alles was das Herz begehrt ...

Voilá

Gruß
babap

Beitrag von nikibert (ForumUser / 78 / 4 / 0 ) »
Moin,
ok, da war mein Vorschlag wohl eher was für Beginner :D Führt aber auch zum Ziel und ist relativ schnell realisiert!
@ babap: Kennst Du zufällig eine gute Klassenbibliothek? Bin bisher um Klassen und Methoden herum geschifft...
So ganz ohne wird es dann wohl auch nicht gehen. Wie finde ich die richtige Klasse bzw. die richtige Methode?
Gruß nikibert

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
entweder du guckst in die Beispiele der SE83, oder du debugst ein SAP-Programm. Wobei die ALV-Beispiel mit den lokalen Klassen schon ziemlich grausam sind (mache das mittlerweile mit einer "echten" Klasse!).

SAP ist doch das größte OPEN-Source-Programm der Welt.
Abgucken erlaubt (oder sehen, wie man es nicht machen sollte ...).

Gruß
babap

Beitrag von natallin (ForumUser / 10 / 0 / 0 ) »
Hallo,

ich habe ein File gespeichert mit demi GUI DOWNLOAD, leider funktioniert nicht im BATCH. Was kann ich machen?

* Binary download
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = fullpath
filetype = 'ASC' "'BIN'
IMPORTING
filelength = length
TABLES
data_tab = ldata.

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
GUI-Download und -Upload gehen im Batch nicht!!
Externe Daten nur über den Umweg Applikationsserver bzw. Open Dataset...
Gruß
babap

Seite 1 von 1

Vergleichbare Themen

12
Antw.
13555
Views
XMl File lesen
von kirmuh » 27.06.2008 12:21 • Verfasst in ABAP Objects®
2
Antw.
1914
Views
File-Informationen vom Server lesen z.B. Erstelldatum
von MindMOB » 13.08.2008 14:45 • Verfasst in ABAP® Core
3
Antw.
8555
Views
URL File-Server Internet File Download /Delet cl_http_client
von Luigi91 » 04.10.2016 08:28 • Verfasst in ABAP Objects®
1
Antw.
7195
Views
Unterschied: Sequentielles lesen, direktes lesen
von MarkusW » 07.08.2008 16:46 • Verfasst in ABAP® für Anfänger
1
Antw.
1611
Views
CSV File
von robin1at » 11.04.2006 18:20 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

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.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111