-
Hallo liebes Forum,
ich schätze die Beiträge sehr und trage auch selbst gerne zu Lösungen bei. Und doch wünsche ich mir mehr sachliche Diskussion und keine Diskussion in dem Stil: meine Lösung ist besser als deine. Für jede Aufgabenstellung gibt es mehrere Lösungen und die Leser des Forums sind gestandene IT-Fachleute, denen ich es zutraue, sich ein eigenes Urteil zu bilden, was die Vielfalt und Anwendbarkeit der Lösungen betrifft.
In diesem Sinne stelle ich meine Idee mit der SQL-Function Split() vor. Die Function kam mit 7.3 TR 6 auf die Maschine. Der Sourcecode der Function kann mit dem Navigator eingesehen werden, damit ist es möglich, diese Function auf einem älteren Release zu implementieren.
Unter dem Pfad /home/import/csv/adressen.csv sind folgende Daten gespeichert. Am Ende jedes Datensatzes ist ein Linefeed
PHP-Code:
10001,Leisha Leysner,80689,München,Amarellenweg 10002,Darion Willimczik,81669,München,Schleibingerstraße 10003,Helvi Holzwardt,81673,München,Dornbergstraße 10004,Theofánis Arndgen,80997,München,Reinoltstraße 10005,Tybi Klimczok,80999,München,Frühaufstraße 10006,Lieschen Bredenkötter,80804,München,Max-von-Gruber-Straße 10007,Andree Flächsenhaar,81369,München,Adunistraße 10008,Heber Uschkerat,80937,München,Karlsteinstraße 10009,Olyvia Füchtling,80331,München,Neuturmstraße 10010,Art Berendes,80999,München,Grünwedelstraße
Folgendes Statement liest die Datei und splittet sie in die einzelnen Datensätze
Carriage Return = chr(13)
Linefeed = chr(10)
Code:
select Ordinal_Position as Pos, Element
from TABLE (SYSTOOLS.SPLIT(get_clob_from_file('/home/import/csv/adressen.csv'), chr(10)));
Das Ergebnis
PHP-Code:
Pos Element ----------------------------------------------------------------------- 1 10001,Leisha Leysner,80689,München,Amarellenweg 2 10002,Darion Willimczik,81669,München,Schleibingerstraße 3 10003,Helvi Holzwardt,81673,München,Dornbergstraße 4 10004,Theofánis Arndgen,80997,München,Reinoltstraße 5 10005,Tybi Klimczok,80999,München,Frühaufstraße 6 10006,Lieschen Bredenkötter,80804,München,Max-von-Gruber-Straße 7 10007,Andree Flächsenhaar,81369,München,Adunistraße 8 10008,Heber Uschkerat,80937,München,Karlsteinstraße 9 10009,Olyvia Füchtling,80331,München,Neuturmstraße 10 10010,Art Berendes,80999,München,Grünwedelstraße
Das RPG-Programm sieht es so aus
Code:
ctl-opt dftactgrp(*no) main(main);
//------------------------------------------------------------------//
// //
// Einlesen einer CSV-Datei und Verarbeiten mit Split() //
// //
//----------------- //
// R.Ross 01.2020 * //
//------------------------------------------------------------------//
// SQL-Options //
//------------------------------------------------------------------//
exec sql set option datfmt=*iso, timfmt=*iso, commit=*chg,
closqlcsr=*endactgrp;
//------------------------------------------------------------------//
// Array Records - wird mit SQL gefüllt //
//------------------------------------------------------------------//
dcl-ds DsRecords qualified dim(10000) inz;
Id int(10);
Text varchar(256);
end-ds;
//------------------------------------------------------------------//
// Main //
//------------------------------------------------------------------//
dcl-proc main;
dcl-s LocFile varchar(256);
dcl-s LocCounter uns(10);
LocFile = '/home/import/csv/adressen.csv';
exec sql declare cursor01 cursor for
select Ordinal_Position, Element
from table (
systools.split(get_clob_from_file(:LocFile), chr(10)));
exec sql open cursor01;
exec sql fetch cursor01 for 10000 rows // Fetch into Array
into :DsRecords;
if sqlcode >= *zero;
exec sql GET DIAGNOSTICS :LocCounter = ROW_COUNT;
endif;
exec sql close cursor01;
end-proc;
//------------------------------------------------------------------//
mit einem weiteren Split() auf den Datensatz werden die einzelnen Felder ausgelesen
Code:
select Ordinal_Position as Pos, Element
from TABLE (SYSTOOLS.SPLIT('10001,Leisha Leysner,80689,München,Amarellenweg', ','));
Das liefert folgendes Ergebnis
PHP-Code:
Pos Element ------------------ 1 10001 2 Leisha Leysner 3 80689 4 München 5 Amarellenweg
Herzliche Grüße
Rainer Ross
Ab und zu entwickle ich auch mal Spiele für die IBM i
http://www.myhofi.com/tms/HTML/SlotMachine.html
http://www.myhofi.com/chess/index.html
aber normalerweise Webanwendungen so schnell wie Greenscreen
http://www.myhofi.com/tms/HTML/Myapp.html
hier ist der Kurs dazu
https://www.toolmaker.de/schulungen/...ibm-i-kompakt/
Similar Threads
-
By M Scheid in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 03-12-14, 17:52
-
By jojoschluckfirma in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 03-12-14, 13:51
-
By gerhardsw in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 20-12-13, 09:27
-
By kuddel in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-02-03, 07:19
-
By Spirou in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 17-04-02, 09:54
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks