|
CSVDocument
|
|
|
|
|
4 |
|
ダブルクォーテーション「"」で囲んだデータをCSV形式で出力したい
[内容]
「"○○○","○○○", …」のような形式のデータを生成し、CSVDocument.saveメソッド
を実行すると「"""○○○""","""○○○""", …」のようなデータへ変換されてしまう
|
|
|
|
|
|
|
4 |
|
[解決方法]
画面へ表示したデータや、集計データ等を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 |
|
|
|