首页 > 解决方案 > 我可以在一列中对值进行分组并在 emeditor 中汇总它们的总数吗?

问题描述

请问我如何对列进行分组并在Emeditor中总结它们的相应值?类似于 Power Query 或 PowerBi 中的“分组依据”。例如:

文件

NAME    COST
John    5
Mike    3
Dan     5
John    2
Dan     8
John    5

预期结果

NAME    COST
John    12
Mike    3
Dan     13

在这种情况下,我在文件的“名称列”下获得每个值的总成本

标签: eemeditor

解决方案


假设两列由制表符分隔,您可以使用 EmEditor 对第一列进行排序,合并行,然后使用带有 JavaScript 的正则表达式替换第二列。如果您想快速完成,可以跳到使用宏部分。

  1. 打开你的文件。

  2. 单击CSV/排序工具栏上的Tab按钮以切换到 Tab 分隔的 CSV 模式。

EmEditor - CSV/排序工具栏

  1. 单击CSV/排序工具栏上的标题按钮,然后选择标题 1

  2. 选择第一列,然后单击CSV/排序工具栏上的从A 到 Z排序按钮对第一列进行排序。

  3. 右键单击标题的第 1 列(或选择编辑菜单上的CSV子菜单),然后选择组合行

  4. 确保检查重复1: COST的列中的复选框已设置,并且要组合的列中的复选框已设置。输入要插入的字符串文本框。单击确定2: NAME+

EmEditor - 合并线条

  1. 选择第二列,按Ctrl+H调出替换对话框,输入[\d\+]+\d查找文本框,然后\J eval("\0");替换为文本框,设置在仅选择正则表达式选项中,然后单击全部替换

EmEditor - 替换

使用宏

如果要使用宏,可以在打开文件后运行以下宏。

editor.ExecuteCommandByID(22529);  // TSV
editor.ExecuteCommandByID(3894);   // Heading 1
document.selection.StartOfDocument(false);
document.Sort("1>A+",eeSortBinaryComparison,"");
document.CombineLines("1","2","+","",0,"");
document.selection.SetActivePoint( eePosCellLogical, 2, 1 );
editor.ExecuteCommandByID(4461);   // Select Column
document.selection.Replace("[\\d\\+]+\\d","\\J eval(\"\\0\");",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
document.selection.Collapse();

要运行它,请将此代码另存为,例如,GroupCol.jsee然后从菜单中的选择...中选择此文件。最后,打开要转换的文件,并在要转换的文件处于活动状态时选择菜单中的运行 GroupCol.jsee 。


推荐阅读