最近、巨大なCSVデータを扱うことが多くなり、EmEditorのCSVモードを利用しています。他のCSVモードを備えたテキストエディタや、CSV専用エディタを試用してみましたが、EmEditorのようにサクサク動作してくれるものはありませんでした。
企業の業務用途に適したテキストエディタとして定着するためにも、CSVモードのさらなる充実を望みたいところです。現状でいちばん足りないと感じるのは、列名(ファイルの先頭行)を常時表示する機能です。水平スクロールしながら、いま自分がどのフィールドにいるのかわからないのです。(現バージョンにすでに[分割ウィンドウの水平同期スクロール]があります。失礼しました。2011/11/26)
そこで、フィールド名をメニューに一覧表示し、一発で移動するマクロを作ってみました。
sFirstLine = document.GetLine(1); aLine = sFirstLine.split(/,/); menu = CreatePopupMenu(); for (i = 0, c = 0x41; i < aLine.length; i++, c++) { // 0x41 = 'A' sField = aLine[i]; menu.Add("&" + String.fromCharCode(c, 0x09) + sField, i + 1); } result = menu.Track(); if (result == 0) { Quit(); } yPos = document.selection.GetActivePointY(eePosLogical) sCurrentLine = document.GetLine(yPos); //行頭から指定回数だけカンマを検索する //データ中のカンマは考慮していない(手抜き) Redraw = false document.selection.StartOfLine(true, eeLineLogical); for (i = 0; i < result - 1; i++) { document.selection.Find(",", eeFindNext ) } document.HighlightFind=false; document.selection.Collapse(); Redraw = true //横位置の調整(いったん行末に移動して戻る) xPos = document.selection.GetActivePointX(eePosLogical) document.selection.EndOfLine(true, eeLineLogical); document.selection.SetActivePoint(eePosLogical,xPos,yPos)
単純にカンマをフィールドの区切りとみなします。手抜きのため、データの中にカンマが含まれると、正確に移動できません。最初は、現在行をカンマでsplitし、移動位置を計算しようとしたのですが、空のデータ(カンマの連続)は要素とみなされないためうまくいきません。行頭からカンマを所定回数検索するというベタベタな方法を採用しました。
あ、[次のセル]コマンドを使えばいいのか。