1 件の投稿を表示中 (合計 5 個)
  • 作成者
    投稿
  • #21189
    loop bridge
    参加者

    お世話になります。

    CSVモード時、任意のn列目のすべての値を容易に取得する方法はありますでしょうか?
    やりたいことは、n列目のすべての値に対して正規表現で置換を行いたいのですが、今は上から順番に行を下っていき、documnet.GetCellで値を取得しつつ…、いささか面倒くさいやり方で行っています。

    説明がヘタクソで申し訳ありませんが、なにかいい方法がありましたらよろしくお願いいたします。

    #21192
    Yutaka Emura
    キーマスター

    loop bridge 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    列を選択して、Ctrl + H で置換ダイアログで「選択した範囲のみ」がチェックされていることを確認して、置換(またはすべて置換)を行っていただけます。

    それとも、「値を取得して…」ということは、値に応じて条件式を使って異なる文字列と置換する、という意味でしょうか? そうだとすると、(?n:true_expression:false_expression) という置換表現を使用することもできます。置換表現については、ヘルプ https://jp.emeditor.com/help/howto/search/search_regexp_syntax.htm をご参照ください。

    よろしくお願い申し上げます。

    #21194
    loop bridge
    参加者

    江村さま

    ご回答ありがとうございます。
    列選択して、選択した範囲のみ置換というのは存じているのですが、
    私が考えているのは、マクロで任意の列を取得した上で、という内容なのです。

    現状は、置換条件は一定ですが(2列目にある空白をすべて削除とか、4列目の特定の文字列を置き換えるなど)、
    今の私のやり方だとループで全行を回しながら、2列目だからこの式、4列目だからこの式、となりますし、
    それ以外の関係ない列もループで通るため、効率的にもあまり満足はしていません。

    イメージとしては、editor.Documents のように、最初のごっそりとn列目の全行の値を配列に取得、
    といったものを考えていたのですが、やはりそういう機能はありませんでしょうか。

    #21199
    Yutaka Emura
    キーマスター

    loop bridge 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    ご説明ありがとうございました。
    指定する列を配列で取得する方法ですが、正攻法では、次のようになります。

    iColumn = 2;
    flags = eeCellIncludeQuotesAndDelimiter;
    yTotal = document.GetLines();
    arr = new Array(yTotal);
    for( yLine = 1; yLine <= yTotal; yLine++ ) {
        arr[yLine-1] = document.GetCell( yLine, iColumn, flags );
    }
    alert( arr );

    既にある列が箱型選択されている状態で、クリップボードを介していいのでしたら、次のようにすることもできます。

    document.selection.Copy();
    str = clipboardData.getData("Text");
    var arr = str.split("\r\n");
    alert( arr );

    ご参考になれば幸いです。

    よろしくお願い申し上げます。

    #21201
    loop bridge
    参加者

    江村さん

    ご回答ありがとうございました。
    やはりそのあたりの方法となりますか…。
    私がやっているのもおおよそ前者と同じような感じでした。

    ともあれ、ご丁寧にサンプルコードまでご用意いただきありがとうございました。
    今後ともよろしくお願いします。

1 件の投稿を表示中 (合計 5 個)
  • このトピックに返信するにはログインしてください。