C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.87734 の関連記事表示

<< 0 >>
■87734  PLSQLによるBOM付きUTF-8でのファイル書き出しの方
□投稿者/ 悩み多きランナー -(2018/06/25(Mon) 23:36:41)

    分類:[データベース全般] 

    PLSQLでカンマ区切りのCSVデータをUTF-8のBOMありで出力したいのですが、
    どうすればできるか、ご存知でしたら教えてください。

    以下のように記述するとUTF-8でCSV出力はできるのですが、BOMなしになってしまいます。
    BOMありで出力するための、記述をご存知でしたら教えてください。
    FL_PACK UTL_FILE.FILE_TYPE; --ファイルパッケージ
    FL_PACK := UTL_FILE.FOPEN('ディレクトリパス','test.csv','w',32767);
    UTL_FILE.PUT_LINE(FL_PACK,CONVERT('カンマ区切りのレコード変数','AL32UTF8','AL32UTF8'));

    出力した後に別の処理でBOMありにする、出力したファイルを手動で開いてBOMありにするのもありですが、出力ファイルが数Gなので、上記出力処理でBOMありにしたいです。
    ネットで調べてみたのですが、目ぼしいのが見つかりませんでした。

    よろしくお願い致します。
親記事 /過去ログ151より / 関連記事表示
削除チェック/

■87735  Re[1]: PLSQLによるBOM付きUTF-8でのファイル書き出しの方
□投稿者/ shu -(2018/06/26(Tue) 08:24:35)
    No87734 (悩み多きランナー さん) に返信

    UTF-8のBOM 0xEF 0xBB 0xBF
    を書き込んだファイルを作っておいて追加でオープンすれば
    なんとかならないでしょうか?
記事No.87734 のレス /過去ログ151より / 関連記事表示
削除チェック/

■87744  Re[2]: PLSQLによるBOM付きUTF-8でのファイル書き出しの方
□投稿者/ 悩み多きランナー -(2018/06/27(Wed) 00:53:48)
    No87735 (shu さん) に返信
    > ■No87734 (悩み多きランナー さん) に返信
    >
    > UTF-8のBOM 0xEF 0xBB 0xBF
    > を書き込んだファイルを作っておいて追加でオープンすれば
    > なんとかならないでしょうか?
    >

    shuさん

    返信ありがとうございます。
    そういうやり方がありましたね。

    今後の参考にさせてもらいます。
記事No.87734 のレス / END /過去ログ151より / 関連記事表示
削除チェック/

■87737  Re[1]: PLSQLによるBOM付きUTF-8でのファイル書き出しの方
□投稿者/ 魔界の仮面弁士 -(2018/06/26(Tue) 10:22:40)
    No87734 (悩み多きランナー さん) に返信
    > UTL_FILE.PUT_LINE(FL_PACK,CONVERT('カンマ区切りのレコード変数','AL32UTF8','AL32UTF8'));
    
    PUT_LINE で出力できましたっけ?
    
    
    -- 案1 --
    DECLARE
      --ファイルパッケージ
      FL_PACK UTL_FILE.FILE_TYPE;
    
      -- ZERO WIDTH NO-BREAK SPACE
      ZWNBSP CONSTANT NVARCHAR2(1) := UTL_RAW.CAST_TO_NVARCHAR2(HEXTORAW('FEFF'));
    BEGIN
      
      -- Unicode ファイルを出力するのだから、FOPEN ではなく FOPEN_NCHAR を使う
      -- なお、コンテンツは NVARCHAR2 で良いけれど、ファイルパスは VARCHAR2 なので注意
      FL_PACK := UTL_FILE.FOPEN_NCHAR('C:\test', 'test.csv', 'w', 32767);
    
      -- BOM の代用として ZWNBSP を送出
      -- 当然、PUT ではなく PUT_NCHAR を使う
      UTL_FILE.PUT_NCHAR( FL_PACK, ZWNBSP );
    
      -- ここからがデータ本体
      -- PUT_LINE ではなく PUT_LINE_NCHAR を使う
      UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'1,最初の行,first' );
      UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'2,後続の行,second' );
      UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'3,最後の行,last' );
    
      UTL_FILE.FCLOSE( FL_PACK );
    END;
    
    
    
    -- 案2 --
    DECLARE
      FL_PACK UTL_FILE.FILE_TYPE;
      BOM_UTF8      CONSTANT RAW(3) := HEXTORAW('EFBBBF');
      BOM_UTF16__BE CONSTANT RAW(2) := HEXTORAW('FEFF');
      BOM_UTF16__LE CONSTANT RAW(2) := HEXTORAW('FFFE');
      BOM_UTF32__BE CONSTANT RAW(4) := HEXTORAW('0000FEFF');
      BOM_UTF32__LE CONSTANT RAW(4) := HEXTORAW('FFFE0000');
    
      -- 今回は CR+LF 改行にしてみる
      LINE NVARCHAR2(2) := NCHR(13) || NCHR(10);
      
      DST_CHAR_SET VARCHAR2(64) := 'AL32UTF8';
      SRC_CHAR_SET VARCHAR2(64) := 'AL16UTF16';
    BEGIN
      
      -- テキスト出力(w)モードではなく、バイナリ出力モード(wb)にする
      FL_PACK := UTL_FILE.FOPEN('C:\test', 'test.csv', 'wb', 32767);
      
      UTL_FILE.PUT_RAW( FL_PACK, BOM_UTF8 );
    
      -- バイナリ出力なので、改行も自分で補う必要がある
      UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'1,最初の行,first' || LINE, DST_CHAR_SET) );
      UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'2,後続の行,second' || LINE, DST_CHAR_SET) );
      UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'3,最後の行,last' || LINE, DST_CHAR_SET) );
    
      UTL_FILE.FCLOSE( FL_PACK );
    END;
記事No.87734 のレス /過去ログ151より / 関連記事表示
削除チェック/

■87745  Re[2]: PLSQLによるBOM付きUTF-8でのファイル書き出しの方
□投稿者/ 悩み多きランナー -(2018/06/27(Wed) 00:56:13)
    No87737 (魔界の仮面弁士 さん) に返信
    > ■No87734 (悩み多きランナー さん) に返信
    >>UTL_FILE.PUT_LINE(FL_PACK,CONVERT('カンマ区切りのレコード変数','AL32UTF8','AL32UTF8'));
    >
    > PUT_LINE で出力できましたっけ?
    >
    >
    > -- 案1 --
    > DECLARE
    > --ファイルパッケージ
    > FL_PACK UTL_FILE.FILE_TYPE;
    >
    > -- ZERO WIDTH NO-BREAK SPACE
    > ZWNBSP CONSTANT NVARCHAR2(1) := UTL_RAW.CAST_TO_NVARCHAR2(HEXTORAW('FEFF'));
    > BEGIN
    >
    > -- Unicode ファイルを出力するのだから、FOPEN ではなく FOPEN_NCHAR を使う
    > -- なお、コンテンツは NVARCHAR2 で良いけれど、ファイルパスは VARCHAR2 なので注意
    > FL_PACK := UTL_FILE.FOPEN_NCHAR('C:\test', 'test.csv', 'w', 32767);
    >
    > -- BOM の代用として ZWNBSP を送出
    > -- 当然、PUT ではなく PUT_NCHAR を使う
    > UTL_FILE.PUT_NCHAR( FL_PACK, ZWNBSP );
    >
    > -- ここからがデータ本体
    > -- PUT_LINE ではなく PUT_LINE_NCHAR を使う
    > UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'1,最初の行,first' );
    > UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'2,後続の行,second' );
    > UTL_FILE.PUT_LINE_NCHAR( FL_PACK, N'3,最後の行,last' );
    >
    > UTL_FILE.FCLOSE( FL_PACK );
    > END;
    >
    >
    >
    > -- 案2 --
    > DECLARE
    > FL_PACK UTL_FILE.FILE_TYPE;
    > BOM_UTF8 CONSTANT RAW(3) := HEXTORAW('EFBBBF');
    > BOM_UTF16__BE CONSTANT RAW(2) := HEXTORAW('FEFF');
    > BOM_UTF16__LE CONSTANT RAW(2) := HEXTORAW('FFFE');
    > BOM_UTF32__BE CONSTANT RAW(4) := HEXTORAW('0000FEFF');
    > BOM_UTF32__LE CONSTANT RAW(4) := HEXTORAW('FFFE0000');
    >
    > -- 今回は CR+LF 改行にしてみる
    > LINE NVARCHAR2(2) := NCHR(13) || NCHR(10);
    >
    > DST_CHAR_SET VARCHAR2(64) := 'AL32UTF8';
    > SRC_CHAR_SET VARCHAR2(64) := 'AL16UTF16';
    > BEGIN
    >
    > -- テキスト出力(w)モードではなく、バイナリ出力モード(wb)にする
    > FL_PACK := UTL_FILE.FOPEN('C:\test', 'test.csv', 'wb', 32767);
    >
    > UTL_FILE.PUT_RAW( FL_PACK, BOM_UTF8 );
    >
    > -- バイナリ出力なので、改行も自分で補う必要がある
    > UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'1,最初の行,first' || LINE, DST_CHAR_SET) );
    > UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'2,後続の行,second' || LINE, DST_CHAR_SET) );
    > UTL_FILE.PUT_RAW( FL_PACK, UTL_I18N.STRING_TO_RAW( N'3,最後の行,last' || LINE, DST_CHAR_SET) );
    >
    > UTL_FILE.FCLOSE( FL_PACK );
    > END;


    魔界の仮面弁士さん

    返信ありがとうございます。
    案1のやり方でBOM付きで出力できました!

    なかなかネットで探しても、上記のような紹介サイトがなかったので
    大変助かりました。ありがとうございます。
記事No.87734 のレス / END /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -