READ
READコマンドは、指定したFILEを処理して、作業リストに情報を返します(SVTABLEキーワードを使用しない場合)。
ローカル・ファイル・システムからファイルを読み込むには、FILEキーワードのみが必要です。
FTPプロトコルを使用してリモート・ファイル・システムからファイルを読み込むには、HOSTキーワードと適切なUSER、PASSWORD、およびリモート・サーバーのアクセス詳細が必要です。
また、サービスでは、読み込まれたバイト内容からUnicode内容への変換に適用されるエンコーディングを決定し、Unicodeデータを保管する必要があるかどうかを判断します。
必須
READ ---------- FILE -----------ファイル・パス---------------------->
条件付
>-- HOST -----------ホスト:ポート---------------------->
>-- USER -----------値-------------------------->
>-- PASSWORD -------値-------------------------->
>-- NAMEFMT --------なし--------------------------->
0
1
>-- DATALINK ------- *PASV -------------------------->
*PORT
>-- MODE ----------- *BINARY ------------------------>
*ASCII
任意
>-- CONTENT -------- *CSV --------------------------->
*TSV
*SV
>-- SEPARATOR ------値-------------------------->
*COMMA
*SEMICOLON
*TAB
*TILDE
>-- ENCODING ------- *DEFAULT ----------------------->
値
>-- SVROW ----------値-------------------------->
>-- SVROWLIMIT -----値-------------------------->
*NONE
*LIST
*AVAILABLE
>-- SVMODE --------- *NONE -------------------------->
*IGNORE
*USE
>-- SVHEAD ---------値-------------------------->
>-- SVLABEL --------値-------------------------->
>-- SVTABLE --------テーブル名--------------------->
>-- SVCOLUMN -------値-------------------------->
>-- NUMBERFORMAT --- *NONE -------------------------->
*DEFAULT
*CLIENT
*USERAGENT
値
>-- ARCHIVE --------ファイル・パス----------------------|
キーワード
FILE |
パスとファイル名を指定します。 この値は相対パスまたは絶対パスになります。パスが相対パスの場合、現在の作業ディレクトリはJSMインスタンス・ディレクトリになります。 |
HOST |
このキーワードは、リモート・ファイル・システムから読み込む場合にのみ必要です。 接続先のFTPサーバーを指定します。FTPサーバーは、IPアドレスnnn.nnn.nnn.nnn:ポート、またはドメイン名で指定できます。 IPアドレスにポート番号を指定しない場合、キーワードSECURE (*IMPLICIT)を使用しない限り省略値21が使用されます。キーワードSECURE (*IMPLICIT)が使用される場合の省略値のポート値は990です。 |
USER |
リモート・ファイル・システムから読み込む場合にのみ必要です。 |
PASSWORD |
リモート・ファイル・システムから読み込む場合にのみ必要です。 USERキーワードに対応するデータベース・サーバーのパスワード |
NAMEFMT |
リモート・ファイル・システムから読み込む場合にのみ有効です。 値が0の場合、IBM i のパス名形式library/file.memberが使用されます。 値が1の場合、Windowsのパス名形式/directory/directory/fileが使用されます。 |
DATALINK |
リモート・ファイル・システムから読み込む場合にのみ有効です。 可能な値は*PASV (パッシブ)または*PORT (ポート)です。*PASVが省略値です。 |
MODE |
リモート・ファイル・システムから読み込む場合にのみ有効です。 省略値は*BINARYです。必要に応じて値*ASCIIを使用します。 |
CONTENT |
省略値では、指定したファイルは*CSVで処理されます。 あるいは、タブ区切り変数(*TSV)、または区切り文字キーワードに指定した変数区切り(*SV)で内容を処理することができます。区切り文字変数を含む内容を処理する場合の追加処理オプションについては、「SEPARATOR」、「SVHEAD」、「SVMODE」、「SVTABLE」、「SVCOLUMN」、「SVLABEL」、「NUMBERFORMAT」、「TRIM」、「TRUNCATE」の各キーワードを参照してください。 内容の保管に使用される作業リストは、データの保管に適した列数で定義する必要があります。 |
SEPARATOR |
このキーワードでは、区切り文字として使用する文字を指定します。内容が*CSVまたは*TSVで表される場合、区切り文字を定義する必要はありません。 SEPARATORキーワードがあり、CONTENTキーワードを指定しない場合、CONTENT(*SV)が前提となります。 詳細については、「SEPARATOR」を参照してください。 |
ENCODING |
ENCODINGは、バイト内容からUnicode文字列への変換に適用されるエンコーディングを指定する場合に使用されます。ENCODINGキーワードの省略値は*DEFAULTです。 詳細については、「ENCODING」を参照してください。 |
SVROW |
SVROWキーワードは、データ・レコードの開始行を指定する場合に使用されます。 詳細については、「SVROW」を参照してください。 |
SVROWLIMIT |
SVROWLIMITキーワードは、読み込むデータ・レコードの数を指定する場合に使用されます。可能な値は*NONE、*LIST、*AVAILABLE、または整数値です。 詳細については、「SVROWLIMIT」を参照してください。 |
SVMODE |
SVMODEキーワードは、区切り値データを処理するコンテンツ・ハンドラーとサービスで使用され、インバウンド区切り値データの処理方法を示します。 詳細については、「SVMODE」を参照してください。 |
SVHEAD |
オプションのキーワードSVHEADは、区切り値データのフィールド・レイアウトの記述に使用されます。 詳細については、「SVHEAD」を参照してください。 |
SVTABLE |
SVTABLEキーワードがある場合、現在のデータベース接続を使用して区切り変数ファイル・データが指定のテーブルに挿入されます。SVTABLEに値を指定しない場合、ファイル・データは作業リスト引数に返されます。 詳細については、「SVTABLE」を参照してください。 |
SVCOLUMN |
SVCOLUMNが使用されるのは、SVTABLEキーワードと組み合わせる場合のみです。SVCOLUMNは、値サービスを区切り、リレーショナル・データベースの列を定義します。sv.column.{値}を使用して、サービス・プロパティ・リソースの検索が行われます。 詳細については、「SVCOLUMN」を参照してください。 |
SVLABEL |
SVLABELが使用されるのは、SVTABLEキーワードと組み合わせる場合のみです。SVLABELは、データベース・テーブル挿入の場合は最初の列値として、データベース・テーブル選択の場合はwhere制約としてキーワード値を含める場合に使用されます。 詳細については、「SVLABEL」を参照してください。 |
NUMBERFORMAT |
オプションのキーワードNUMBERFORMATは、小数区切り文字が小数点文字「.」ではない数字文字列を処理する場合に使用されます。 詳細については、「NUMBERFORMAT」を参照してください。 |
ARCHIVE |
オプションのキーワードARCHIVEを使用して、内容の保管に使用されるパスとファイル名を指定します。 詳細については、「ARCHIVE」を参照してください。 |
例
RDML
DEF_LIST NAME(#WRKLIST) FIELDS(#LINENUM #PARTNUM #PARTDSC #PARTAMT #PARTQTY) TYPE(*WORKING)
USE BUILTIN(JSM_COMMAND) WITH_ARGS('READ FILE(order.csv) SERVICE_LIST(LINENUM,PARTNUM,PARTDSC,PARTAMT,PARTQTY)') TO_GET(#JSMSTS #JSMMSG #WRKLIST)
または
USE BUILTIN(JSM_COMMAND) WITH_ARGS('READ FILE(order.csv) SEPARATOR(*TILDE) SERVICE_LIST(LINENUM,PARTNUM,PARTDSC,PARTAMT,PARTQTY)
') TO_GET(#JSMSTS #JSMMSG #WRKLIST)
または
USE BUILTIN(JSM_COMMAND) WITH_ARGS('READ FILE(order.csv) SVTABLE(ORD) SVCOLUMN(ORDER) SVLABEL(23)') TO_GET(#JSMSTS #JSMMSG)
RDMLX
#jsmcmd := 'read file(' + #jsmfile + ') content(*sv) separator(' + #separator + ')'
use builtin(jsmx_command) with_args(#jsmhdle #jsmcmd) to_get(#jsmsts #jsmmsg #valueslst)
ILE RPG
* NB: This MUST match the structure xml provided to the JSM Server!
d svlist ds occurs(svocur)
d linenum 7s 0
d partnum 7a
d partdsc 30a
d partamt 9s 2
d partqty 7s 0
d svocur c const(50)
d svsize c const(%size(svlist))
d svcount s 9p 0 inz(0)
c eval jsmcmd = 'READ'
c + ' FILE(' + %trim(svfilepath) + ')'
c + ' SVHEAD(ORDER)'
c + ' SERVICE_STRUCTURE(SV.SVOrderLine)'
c + ' OCCURS(' + %char(svocur) + ')'
c + ' SIZE(' + %char(svsize) + ')'
c eval %occur(svlist) = 1
c eval bytelength = svocur * svsize
c callp p_jsmcmdx(jsmcmd:svlist:bytelength:
c jsmsts:jsmmsg)
c if jsmsts = 'OK'
c callp p_jsmbytelngth(bytelength)
c if (bytelength > 0)
c and (bytelength <= svocur * svsize)
c callp p_jsmbyterecv(svlist)
c eval svcount = bytelength / svsize
c endif
c endif