CSV中の列の取得についてNo.32035
surebass さん 13/02/22 16:19
 
CSVデータを操作するマクロを記述するにあたり、
「各行のN列目のデータ」を変数にセットしたいと思っています。
(行によって取得する列が変わることはありません。)

固定長データであれば、MID関数で取得する方法は判るのですが、
不定長データのCSVの場合の取得方法が判りません。

アドバイスいただけたら幸いです。

[ ]
RE:32035 CSV中の列の取得についてNo.32036
秀丸担当 さん 13/02/22 16:46
 

CSVに特化した文字列操作というのはなく、基本的には普通のテキストを扱うの
と同じような感じになると思います。
変数の場合strstr関数で"'"を検索しつつmidstrで取得していくという感じにな
ると思います。

[表示]→[タブストップ]→[CSVモード(カンマ区切り)] にすると、カンマを見
た目上のタブストップに見立てて表示することができます。
これを使うと任意のカラムをクリックして選択してCtrl+Cでコピーするという操
作方法ができます。
マクロの場合のCSVモードでのカーソル移動の文として、forwardtab;とbacktab;
がカラム間のカーソル移動になるものがあります。

あと最近β版会議室で話題がありまして、BOX選択(カラム選択)をカラーマー
カー化して扱いやすくする方法も考えています。
CSVモードでマウス操作はできますが、マクロで任意のカラムをマウス選択した
ようにする操作に相当するものは無いので、そういった関連しそうなことも検討
していきたいと思います。

[ ]
RE:32036 CSV中の列の取得についてNo.32038
surebass さん 13/02/22 17:14
 
早速のご返答ありがとうございます

>変数の場合strstr関数で"'"を検索しつつmidstrで取得していくという感じになると
>思います。

各行のN列目をmidstrで取得する際に、固定長であれば取得開始位置が決まるのです
が、不定長の場合の開始位置を指定する方法があるのでしょうか?正規表現??

>strstr関数で"'"を検索しつつ・・・
というのは、midstrで「行先頭から数えて○○個目のコンマ以降△文字を取得」的な
指定ができるという意味でしょうか?
(↑この指定ができると一番やりやすいのですが…)


[ ]
RE:32038 CSV中の列の取得についてNo.32039
秀丸担当 さん 13/02/22 17:30
 

strstrで"'"ではなく","でした。失礼しました。

>>strstr関数で"'"を検索しつつ・・・
>というのは、midstrで「行先頭から数えて○○個目のコンマ以降△文字を取得」的な
>指定ができるという意味でしょうか?
>(↑この指定ができると一番やりやすいのですが…)

strstrは先頭からしか調べられないです。
基本的な関数を使うぶんにはmidstrを何回もしたりして面倒なことが必要になる
と思います。

文字列の途中からでは、hmjre.dllの関数を使う方法があります。
詳細は、HmJre.dllのヘルプの「マクロからのdllfunc呼び出し」のところを参照
してほしいです。

例:
loaddll "hmjre.dll";
$a="0123,567,9";
#start=5;
#n = dllfunc("FindRegular", ",", $a, #start);
message str(#n);

[ ]
RE:32038 CSV中の列の取得についてNo.32041
山紫水明 さん 13/02/23 09:12
 
 surebassさん,

次のマクロでいかがでしょう。
取り出したい行の上で実行します。
//--------------------------------------
#a = 4;//取り出したい列の番号
$s = gettext2( 0, lineno, linelen2, lineno );
#i = 0;
while( #i < #a - 1 ) {
    #n = strstr($s, ",");
    $s = midstr($s, #n + 1);
    #i = #i + 1;
}
#m = strstr($s, ",");
$s = leftstr($s, #m);
message $s;
endmacro;
//--------------------------------------

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:32041 CSV中の列の取得についてNo.32042
surebass さん 13/02/25 08:49
 
 山紫水明さま

まさしく、期待する動きです。
ありがとうございます。

しかし、なぜ期待する結果になるのか?
まだ完全に動きが追えてなくて・・・

頑張ってみます。

[ ]