前のページ|次のページ

FCOPY関数

一方のファイル参照名から他方のファイル参照名にレコードをコピーし、そのレコードが正常にコピーされたかどうかを示す値を返します。

カテゴリ: SASファイルI/O

構文

FCOPY('fileref-1', 'fileref-2')

必須引数

'fileref-1'

レコードのコピー元となる既存のファイル参照名を指定します。

'fileref-2'

レコードのコピー先となる既存のファイル参照名を指定します。

詳細

FCOPY関数によって返される値

FCOPYでは、次の値が返されます。
  • レコードがエラーまたは警告なしにコピーされた場合は、0の値
  • エラーが発生した場合は、正の値
  • 警告が発行された場合は、負の値
SYSMSG関数を使用すると、エラーまたは警告メッセージを取得できます。また、SYSRC関数を使用すると、リターンコードを取得できます。

FCOPY関数でのマクロ変数の使用

次のマクロ変数で、FCOPY関数の情報が提供されます。
  • FCOPYでエラーまたは警告メッセージがログに書き込まれた場合、&SYSCCおよび&SYSERRマクロ変数が設定されます。
  • FCOPYが警告リターンコードを返しても、FCOPYからログが出力されない場合は、&SYSCCおよび&SYSERRマクロ変数は設定されません。
  • FCOPYでエラーメッセージがログに書き込まれた場合、&SYSERRORTEXTマクロ変数が設定されます。
  • FCOPYで警告メッセージがログに書き込まれた場合、&SYSWARNINGTEXTマクロ変数が設定されます。

テキストファイルの論理レコード長の設定

WindowsおよびUNIX動作環境では、外部ファイルの読み取りや書き込みのデフォルト論理レコード長は32,767バイトです。最大論理レコード長は1GBです。テキストファイルには、非構造化逐次バイト列から成るデータストリームが含まれます。改行制御文字などの区切り文字でデータストリームの長さが制御され、データストリームの情報はレコードに分割されます。レコード長が32,767バイトを超える場合は、レコードの論理レコード長を定義して、FCOPYによるテキストファイルのコピー時にデータが切り捨てられないようにする必要があります。論理レコード長をより大きな値に設定するには、OPTIONSステートメントのLRECL=システムオプション、またはFILENAMEステートメントのLRECL=オプションを使用します。
LRECL値の設定方法を示す例については、診断メッセージを参照してください。
ヒント
LRECL=オプションに対して恣意的に大きな値を選択すると、メモリが過度に使用される結果を招いてパフォーマンスが低下する可能性があります。
z/OS固有: ネイティブz/OSファイルには構造化レコードが含まれ、ファイルのレコード定義に区切り文字は使用されません。ネイティブファイルの最大論理レコード長は32,760バイトです。この値は、FILENAMEステートメントを使用するか、z/OS JCLを使用すると、上書きできます。z/OS上のUNIXファイルでは、移植可能な32,767バイトがデフォルト論理レコード長に使用され、最大レコード長は16M–1(16,777,215)バイトです。

例1: テキストファイルのコピー

MSGLEVEL=システムオプションをIに設定すると、FCOPYからの情報メッセージがログに書き込まれます。
   /* Set MSGLEVEL to I to write messages from FCOPY to the log. */
options msglevel=i;

filename src 'source.txt';
filename dest 'destination.txt';

   /* Create an example file to copy. */
data _null_;
   file src;
   do i=1, 2105, 300312, 400501;
      put i:words256.;
   end;
run;

   /* Copy the records of SRC to DEST. */
data _null_;
   length msg $ 384;
   rc=fcopy('src', 'dest');
   if rc=0 then
      put 'Copied SRC to DEST.';
   else do;
      msg=sysmsg();
      put rc= msg=;
   end;
run;
次の出力がログに書き込まれます。
INFO:The source fileref SRC for the FCOPY function is:Filename=your-source-file, RECFM=V,LRECL=32767,File Size (bytes)=121, Last Modified=15Aug2012:11:21:39, Create Time=15Aug2012:09:13:38 INFO:The destination fileref DEST for the FCOPY function is:Filename=your-destination-file, RECFM=V,LRECL=32767,File Size (bytes)=0, Last Modified=15Aug2012:11:21:39, Create Time=15Aug2012:09:13:39 Copied SRC to DEST.

例2: バイナリファイルのコピー

この例では、バイナリファイルが一方のディレクトリから他方のディレクトリにコピーされます。MSGLEVEL=システムオプションをIに設定すると、FCOPYからの情報メッセージがログに書き込まれます。
   /* Set MSGLEVEL to I to write messages from FCOPY to the log. */
options msglevel=i; 

filename src 'raises.xlsx' recfm=n;
filename dest 'raises-2012.xlsx' recfm=n;

   /* Create an example file to copy. */
data _null_;
   file src;
   do i=1, 2105, 300312, 400501;
     put i:words256.;
   end;
run; 

data _null_;
   length msg $ 384;
   rc=fcopy('src', 'dest');
   if rc=0 then
      put 'Copied SRC to DEST.';
   else do;
      msg=sysmsg();
      put rc= msg=;
   end;
run;
次の出力がログに書き込まれます。
INFO:The source fileref SRC for the FCOPY function is:Filename=your-source-file, RECFM=N,LRECL=256,File Size (bytes)=117, Last Modified=15Aug2012:12:49:18, Create Time=15Aug2012:12:42:00 INFO:The destination fileref DEST for the FCOPY function is:Filename=your-destination-file, RECFM=N,LRECL=256,File Size (bytes)=0, Last Modified=15Aug2012:12:49:18, Create Time=15Aug2012:12:42:01 Copied SRC to DEST.

例3: 診断メッセージ

この例では、MSGLEVEL=システムオプションがIに設定されている場合に、FCOPY関数の結果から生じる診断メッセージを示します。コピー元ファイルのレコード長は256バイトで、コピー先ファイルのレコード長は5バイトです。警告メッセージによって、ファイルが切り捨てられたことが確認されます。
filename src 'source.txt' lrecl=256;

   /* Create example file to copy. */
data _null_;
   file src;
   do i=1, 2105, 300312, 400501;
      put i:words256.;
   end;
run;

   /* Make LRECL for DEST short, to force output truncation. */
filename dest 'destination.txt' lrecl=5;

   /* Set MSGLEVEL to I to write messages from FCOPY to the log. */
  options msglevel=i;
data _null_;
   rc=fcopy('src', 'dest');
run;
次の出力がログに書き込まれます。
INFO:The source fileref SRC for the FCOPY function is:Filename=your-source-file, RECFM=V,LRECL=256,File Size (bytes)=121, Last Modified=15Aug2012:15:14:38, Create Time=15Aug2012:09:13:38 INFO:The destination fileref DEST for the FCOPY function is:Filename=your-destination-file, RECFM=V,LRECL=5,File Size (bytes)=0, Last Modified=15Aug2012:15:14:38, Create Time=15Aug2012:09:13:39 WARNING:3 records were truncated when the FCOPY function wrote to fileref DEST.WARNING:To prevent the truncation of records in future operations, you can increase amount of space needed to accomodate the records by using the LRECL= system option or the LRECL= option in the FILENAME statement.
前のページ|次のページ|ページの先頭へ