CSVDocument

Q1
CSVのセルデータの一部の文字列を検索して抽出したい
A1

[解決方法]
CSVDocumentクラスとStringクラスを利用する事で実装が可能です。

実装方法をサンプルに沿って案内いたします。
サンプルでは、データを一旦CSVDocumentオブジェクトへ格納し、CSVDocument.getCell
メソッドで指定セルのデータを読み込んでいます。
読み込んだデータをStringクラスへ格納し、String.indexOfで条件と比較して、合わなければ CSVDocument.deleteRowでセルを含む行全体を削除します。
全ての行について比較を行ったら、FlexViewへ出力します。

[サンプルコード]
            
   /* CSVデータ格納 */
   CSVDocument data1;
   …
   /* 選択したCSVデータ格納用 */
   CSVDocument data2;
   
   TextBox TextBox1 {
		…
   }
   Button Button1 {
      …
      Function OnTouch( e ) {
         frm_sample.search(frm_sample.TextBox1.Value);
      }
   }
   FlexView FlexView1 {
      …

      /* FlexViewへデータをロード */
      FlexView1 << ^.data1;		
   }
	
  /* 文字列検索関数 */
  Function search( str ){
    if(str == "*"){
      /* FlexView1のデータを削除 */
      frm_sample.FlexView1.ClearRows();
      /* 検索データをFlexView1にロード */
      frm_sample.FlexView1 << frm_sample.data1;
    }else{
      var data = "";
      var s_data = 0;
      
      /* data1のデータをdata2 へロード */
      frm_sample.data2 << frm_sample.data1;
      
      var count = 0;
      /* 検索処理 */
      do {
        /* 検索対象のセルを取得 */
        data = frm_sample.data2.getCell ( count, 1);
        
        /* 対象のセルが存在する場合 */
        if(data != null){
          /* セルのデータ内の文字列検索 */
          s_data = find(data,str,0);
          /* 対象文字列が存在しない場合、行を削除 */
          if(s_data == -1){
            frm_sample.data2.deleteRow(count);
            /* 削除した分、行カウントをデクリメント */
            count --;
          }
        }
        /* 行カウントのインクリメント */
        count ++;
      } while( data != null );
      
      /* FlexView1のデータを削除 */
      frm_sample.FlexView1.ClearRows();
      /* 検索データをFlexView1にロード */
      frm_sample.FlexView1 << frm_sample.data2;
    }
  }

ただし、大量のデータを扱う場合、Biz/Browser上で処理をすると処理速度に影響が出ます。
データ量によってはサーバ側で処理をし、計算結果をデータとしてBiz/Browserへ渡すといった
方法が適している場合もあります。

CRSファイル形式のサンプル
 「CSVの読込条件を付加(Csv_003.crs)
で実際の動作をご確認頂けます。

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