hyperion Geschrieben 23. September 2008 Geschrieben 23. September 2008 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 Zitieren
MAJOR_TOM Geschrieben 23. September 2008 Geschrieben 23. September 2008 OPEN DATASET öffnet eine Datei auf dem Applikationsserver, nicht auf dem Frontend! Um Dateien vom Frontend zu laden / darauf zu schreiben, kannst du die Methoden der Klasse CL_GUI_FRONTEND_SERVICES, oder die Funktionsbausteine GUI_UPLOAD / GUI_DOWNLOAD nutzen. Gruß, Tom. Zitieren
hyperion Geschrieben 23. September 2008 Autor Geschrieben 23. September 2008 Hallo, hat funktioniert, danke. mfg hyperion Zitieren
hyperion Geschrieben 23. September 2008 Autor Geschrieben 23. September 2008 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 Zitieren
MAJOR_TOM Geschrieben 23. September 2008 Geschrieben 23. September 2008 Was du da versuchst, kann nicht so funktionieren wie du es dir vorstellst! Habe grade nicht genug Zeit, das wie und warum auszuformulieren... Poste doch mal bitte den kompletten Quellcode, dann sollte ich es dir genauer erklären können. Zitieren
hyperion Geschrieben 24. September 2008 Autor Geschrieben 24. September 2008 Hmm eigentlich ist das schon der Ganze, mal abgesehen vom Deklerationsteil und noch einem anderen Teil welcher die Eingabe von Datensätzen über Eingabefelder ermöglicht, aber das hat eigentlich nichts mit dem obigen CODE zu tun. mfg hyperion Zitieren
MAJOR_TOM Geschrieben 24. September 2008 Geschrieben 24. September 2008 Genau darum gehts mir: Die Definitionen von itab und struc1! Zitieren
hyperion Geschrieben 24. September 2008 Autor Geschrieben 24. September 2008 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 Zitieren
MAJOR_TOM Geschrieben 24. September 2008 Geschrieben 24. September 2008 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. Zitieren
hyperion Geschrieben 24. September 2008 Autor Geschrieben 24. September 2008 Ah Danke, ich seh shcon ich habe heute wieder Spaß in der Arbeit;) Zitieren
Empfohlene Beiträge
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.