CSVDocument

Q1
ダブルクォーテーション「"」で囲んだデータをCSV形式で出力したい 
[内容]
「"○○○","○○○", …」のような形式のデータを生成し、CSVDocument.saveメソッド
を実行すると「"""○○○""","""○○○""", …」のようなデータへ変換されてしまう
A1

[解決方法]
画面へ表示したデータや、集計データ等をCSV形式でファイルへ出力する場合、
CSVDocumentクラスを利用し、CSVDocument.saveメソッドにてファイルへ出力するといった
方法が一般的です。

しかし、ダブルクォーテーション「"」で囲んだデータをCSVDocument.saveメソッドで出力すると
「"""○○○""","""○○○""", …」という形式になってしまいます。
これは、CSVDocument.saveメソッド実行時、データに含まれるダブルクォーテーション「"」を
文字列として扱うため、自動的にダブルクォーテーションを2つ("")付与するといった処理が
行われる為です。

そこで、CSVDocument.saveメソッドを使用しない方法を以下のサンプルで紹介いたします。
サンプルでは、CSVDocumentオブジェクトからデータをセルごとに読み出し、
ダブルクォーテーション「"」やカンマ「,」、改行コードを付与した上でString変数へ格納し、
ファイルに書き出しています。

[サンプルコード] ※記述ポイント抜粋
Form Form1 {
 …
 FlexView fxvList {
  …
 }
 …
 Button Button1 {
  …
  
  CSVDocument csvData;
  
  Function OnTouch( e ) {
   
   /* FlexViewのデータをロード */
   csvData << ^.fxvList;
   
   var dq = "\""; /* ダブルクォーテーション */
   var cm = ","; /* カンマ */
   var par = "\r\n"; /* 改行 */
   
   /* CSVデータ格納用 */
   var memo = "";
   
   /* 行数分ループ */
   for ( var i= 0; i < csvData.Rows; i++ ) {
    /* 列数分ループ */
    for (var j = 0; j < csvData.columns; j++ ){
     if ( j == (csvData.columns -1)) {
      /* 最終列の場合は、改行 */
      memo += dq + str(csvData.getCell(i,j)) + dq + par;
     }else{
      /* 最終行でなければカンマを追加 */
      memo += dq + str(csvData.getCell(i,j)) + dq + cm;
     }
    }
   }

   var fs = new FileSystem;
   var f = fs.Open("outdata.csv",FileSystem.OPEN_WRITE);
   /* データをファイルへ書き出し */
   f.Write(memo);
   f.Close();
   
   var rt = new Runtime;
   /* 出力したファイルを開く */
   if( ! rt.ShellOpen("outdata.csv") ) {
      MessageBox( "error", "error", $ok );
   }
  }
 }
}

実際の挙動については、CRSファイル形式のサンプル
   「データを「"」で囲んだCSVファイルの出力(Csv_004.zip)」
をご確認ください。

管理番号:Csv_004
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ