Zum Inhalt springen

ABAP - Fehler beim Lesen einer Datei


hyperion

Empfohlene Beiträge

Hallo,

ich habe mal wieder ein Problem.

Mein Ziel ist es eine Datei zu lesen und den Inhalt dann in eine interne Tabelle zu schreiben. Mein Code sieht ausschnittsweise so aus:


OPEN DATASET verzeichnis FOR INPUT.


      DO.


        READ DATASET verzeichnis INTO itab.


      ENDDO.


verzeichnis enthält: D:\Daten\test.txt

Den Fehler bekomme ich bei: READ DATASET verzeichnis INTO itab.

Fehler: Die Datei ... konnte nicht geöffnet werden.

Fehlertext: No such file or directory

Unklar ist mir, dass die Fehlermeldung nicht shcon beim OPEN-Befehl kommt, da ja dort auch schon die Datei geöffnet wird.

mfg hyperion

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

hmm ich finde die Dokumentation dieses FuBas irgendwie knapp. Ich sehe nirgendwo beschrieben was ich alles für has_field_seperator einsetzen kann. Für die anderen Parameter gilt das gleiche. Gibt es einen has_field_seperator für enter?

Ich habe ein File test.txt worin folgendes steht:

1

1

Wo liegt Rom?

Italien

Deutschland

A

1

3

Was kommt nach D?

A

E

B

Nun will ich, dass das ganze in eine interne Tabelle geschrieben wird mit folgender Struktur:

Index, Nummer, Frage, AntwortA, AntwortB, Richtig

Am Ende des Einlesens sollte das ganze dann etwa so aussehen:


Index  Nummer  Frage                   AntwortA  AntwortB      Richtig


1        1           Wo liegt Rom?        Italien      Deutschland A

1        3           Was kommt nach D B             E                B

Probiert habe ich schon 1000-Versionen. Meine aktuelle sieht so aus:

*Zählen der Einträge in zmtquizdb um den letzten Index zu ermitteln.

  SELECT * FROM zmtquizdb.


    n = n + 1.


  ENDSELECT.



CALL FUNCTION 'GUI_UPLOAD'

     EXPORTING

          filename = verzeichnis

          read_by_line = 'X'

     TABLES

          data_tab = itab.


LOOP AT itab.


*Der Index wird angepasst.

 itab-ind = ( n + 1 ).


*Aktueller Datensatz wird nach struc1 verschoben.

  MOVE-CORRESPONDING itab TO struc1.


*Einfügen des Arbeitsbereiches in zmtquizdb.

  INSERT INTO zmtquizdb VALUES struc1.


ENDLOOP.

Was passiert? Des Programm läuft zwar durch trägt mir aber nur Leerzeichen ein (mal abgesehen zmtquizdb-ind, aber das beeinflusse ich ja auch anders.)

Bitte um Hilfe.

mfg hyperion

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh ok hätte nicht gedacht, dass der Fehler hier liegt;) Naja vorsichtshalber gebe ich dir dan nauch den restlichen Deklerationsteil.


*Verwendete Tabelle. Enthält die Fragen zu zmtquizmitdb.

TABLES: zmtquizdb.


*Dekleration eines Arbeitsbereiches.

DATA: BEGIN OF struc1,

         ind(3),

         nummer(3),

         frage(100),

         antworta(25),

         antwortb(25),

         antwortc(25),

         antwortd(25),

         richtig(1),

       END OF struc1.


*Dekleration einer internen Tabelle.

DATA: itab LIKE zmtquizdb OCCURS 10 WITH HEADER LINE.


*Deklerationen für Felder die mit Dynpros verknüpft sind.

DATA: nummer(3),

      frage(100),

      a(25),

      b(25),

      c(25),

      d(25),

      richtig(1),

      verzeichnis type string,

      ok_code(4).


*Deklerationen für den Code.

DATA: n       TYPE i.  "Enthält die Anzahl der Fragen

mfg hyperion

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem liegt in der Struktur der Datei. Hier sind die einzelnen Spalten der Tabelle in die du später schreiben willst, in unterschiedlichen Zeilen enthalten! Soll bedeuten:

Datei Zeile 1 enthält den Wert für Spalte "ind" der Tabelle,

Datei Zeile 2 enthält den Wert für Spalte "nummer" der Tabelle usw.

Der Funktionsbaustein GUI_UPLOAD liest jetzt aber die Datei zeilenweise ein, und versucht die eingelesene Zeile der Zielstruktur anzupassen.

Beispiel: Zeile x deiner Datei enthält folgenden Wert: "Wo liegt Rom?". GUI_UPLOAD splitted diesen String jetzt in die einzelnen Komponenten der Zielstruktur auf. Die Zeile deiner internen Tabelle enthält jetzt also


IND NUMMER FRAGE

Wo  lie    gt Rom?

Schaus dir im Debugger an!

Du hast jetzt zwei Möglichkeiten: Entweder du passt die Struktur deiner Datei entsprechend an, so dass sie die Werte in der Form enthält die der deiner Tabelle entspricht, oder - und das ist aufwändiger - du liest alle Zeilen der Datei in eine temporäre Tabelle die nur eine(!) Spalte besitzt, LOOPst danach über diese Tabelle, lässt einen Zähler mitlaufen anhand dessen du entscheidest welcher Spalte deiner Zieltabelle die aktuelle Zeile der temporären Tabelle entspricht und baust mit diesen Informationen deine eigentliche Zieltabelle auf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...