- 作成者投稿
- 2015年1月9日 5:40 am #21189loop bridge参加者
お世話になります。
CSVモード時、任意のn列目のすべての値を容易に取得する方法はありますでしょうか?
やりたいことは、n列目のすべての値に対して正規表現で置換を行いたいのですが、今は上から順番に行を下っていき、documnet.GetCellで値を取得しつつ…、いささか面倒くさいやり方で行っています。説明がヘタクソで申し訳ありませんが、なにかいい方法がありましたらよろしくお願いいたします。
2015年1月9日 12:24 pm #21192Yutaka Emuraキーマスターloop bridge 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
列を選択して、Ctrl + H で置換ダイアログで「選択した範囲のみ」がチェックされていることを確認して、置換(またはすべて置換)を行っていただけます。
それとも、「値を取得して…」ということは、値に応じて条件式を使って異なる文字列と置換する、という意味でしょうか? そうだとすると、(?n:true_expression:false_expression) という置換表現を使用することもできます。置換表現については、ヘルプ https://jp.emeditor.com/help/howto/search/search_regexp_syntax.htm をご参照ください。
よろしくお願い申し上げます。
2015年1月10日 1:31 pm #21194loop bridge参加者江村さま
ご回答ありがとうございます。
列選択して、選択した範囲のみ置換というのは存じているのですが、
私が考えているのは、マクロで任意の列を取得した上で、という内容なのです。現状は、置換条件は一定ですが(2列目にある空白をすべて削除とか、4列目の特定の文字列を置き換えるなど)、
今の私のやり方だとループで全行を回しながら、2列目だからこの式、4列目だからこの式、となりますし、
それ以外の関係ない列もループで通るため、効率的にもあまり満足はしていません。イメージとしては、editor.Documents のように、最初のごっそりとn列目の全行の値を配列に取得、
といったものを考えていたのですが、やはりそういう機能はありませんでしょうか。2015年1月11日 2:31 am #21199Yutaka 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 );
ご参考になれば幸いです。
よろしくお願い申し上げます。
2015年1月11日 9:23 pm #21201loop bridge参加者江村さん
ご回答ありがとうございました。
やはりそのあたりの方法となりますか…。
私がやっているのもおおよそ前者と同じような感じでした。ともあれ、ご丁寧にサンプルコードまでご用意いただきありがとうございました。
今後ともよろしくお願いします。 - 作成者投稿
- このトピックに返信するにはログインしてください。