-
Ausländische Zeichen in Streamfile schreiben
Hallo,
ich möchte in eine Streamfile, die UTF-8 kodiert sein soll, Sonderzeichen (z.B. türkische oder polnische Buchstaben) schreiben.
Im Prinzip mache ich über die Unix-Type APIs folgendes: (Hier etwas vereinfacht):
Code:
open64(file:OpenFlag:AccessFlag:1208:1141);
dcl-s buffer ucs2(64000);
len = 1;
buffer = 'A';
// Errechnen der Anzahl der zu schreibenden Bytes:
if len > 0;
size = %size(%subst(buffer:1:len));
AnzBytes = write(handle:address:size);
endif;
Im Debugger zeigt er mir folgende Werte:
size: 2
buffer (in hex): 0041
In der Datei kommt aber folgendes an (in Hex, angesehen mit wrklnk):
00C2A0
Hat jemand eine Idee? Vielen Dank im Voraus!
Dieter
-
Klar, wenn du dem Open sagst, dass der Code im Buffer 1141 sein soll, du aber 1200 (UCS) reinstellst.
Die x'00' bleibt unverändert.
Die x'41' ist aber als EBCDIC ganz was anderes als ein 'A' und das wird dann in UTF8 als x'C2A0' dargestellt, was immer das für ein Zeichen sein soll.
Nimm statt 1141 die 1200 oder statt UCS2 eben CHAR.
-
Vielen Dank Baldur. Genau das war's. Ich öffne die Datei jetzt mit ...1208:1200). Jetzt klappt es. Vielen Dank!
-
Übrigens geht das viel einfacher über SQL CLOB_FILE und CLOB (seit V5R4) kann man zwischen IFS und Programm Dateien bis 16MB (Default) oder bei Aktivierung von Teraspace bis 2 TB schreiben, lesen und mit CCSID konvertieren.
-
Danke für den Hinweis. Aber in meinem Problemfall muss ich aus meinem RPG-Programm heraus immer wieder kleine Datenmengen in eine Streamfile schreiben. Die Streamfile selber wird dabei manchmal größer als 16MB.
So wie es jetzt implementiert ist, läuft es sehr schön und schnell.
-
CLOB bzw. DBCLOB-Files können bis zu 2 GB groß werden (unabhängig davon ob mit oder ohne Teraspace gearbeitet wird).
Auch kleine Datenmengen können aus RPG jederzeit (mit SQL-Befehlen) hinzugefügt werden.
16MB ist die Grenze, wenn man mit LOB-Variablen arbeitet.
... und das Ganze geht übrigens nicht erst seit V5R4 sondern seit V5R1.
Birgitta
-
Das mit den 2GB ist korrekt, wenn man mit LOB-Locator arbeitet und sich immer per SQL-Substring die Teile rausholt oder setzt.
Ohne Teraspace kann eine Programmvariable nur max. 16MB groß werden und da ist es etwas mühsam, 2GB zu verarbeiten.
-
Ich habe allerdings nicht von einem LOB-Locator (das geht natürlich auch), sondern von einer LOB-File geredet, damit kann man direkt ins IFS schreiben.
Sowohl LOB-Locatoren als auch LOB-Files kann man mit SQL-Befehlen behandeln wie normale alphanumerische Felder, d.h. man kann Skalare Funktionen wie SUBSTR oder LOCATE einsetzen.
Bei einer LOB-File kann man mit einem einfachen SQL SET-Befehl die nächsten Zeichen hinzufügen, vorausgesetzt, dass die File-Operation auf APPEND (SQAPP) gesetzt ist.
Vielleicht noch eine Anmerkung zu LOB-Locators. Diese können nur unter Commitment-Steuerung verwendet werden.
Birgitta
Similar Threads
-
By harkne in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 30-11-15, 08:48
-
By Karlchen50 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 20-08-14, 14:14
-
By JonnyRico in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 02-04-03, 15:52
-
By Michael@Paff.de in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 28-04-02, 08:42
-
By Bleil in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 13-10-01, 20:15
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