以下列格式给定分隔数据,如何插入和删除列?
abc|efg|123|xyz123abc|yes xxx|bbb|cc|ddd|no
例如,假设我想添加一个默认值为1的第3列并删除第4列,以便数据如下所示:
abc|efg|1|123|yes xxx|bbb|1|cc|no
我正在研究org-mode表作为起点,但它会在数据周围添加额外的空格。
| abc | efg | 123 | xyz123abc | | xxx | bbb | cc | ddd | | | | | |
答案 0 :(得分:2)
除了org-mode的表格设施外,Emacs还有其他一些表格编辑功能,可以帮助你完成大部分工作。
abc|efg|123|xyz123abc|yes
xxx|bbb|cc|ddd|no
选择区域后跟
Mx table-capture
RET |
RET $
RET RET 1
RET
给我们:
+---+---+---+---------+---+
|abc|efg|123|xyz123abc|yes|
+---+---+---+---------+---+
|xxx|bbb|cc |ddd |no |
+---+---+---+---------+---+
现在将点移动到要删除的列的单元格内,并使用
M-x table-delete-column
RET
+---+---+---+---+
|abc|efg|123|yes|
+---+---+---+---+
|xxx|bbb|cc |no |
+---+---+---+---+
'无法识别'表格将关闭表格编辑模式,以便您可以安全地处理格式化。
M-x table-unrecognize-table
RET
然后只需要搜索和替换即可恢复原始格式。
您可以通过使用 Ck Ck 删除第一行来删除所有行分隔符,并使用 M - % 删除剩余部分CY RET RET <!/ KBD>)
|abc|efg|123|yes|
|xxx|bbb|cc |no |
然后你只需要清理行前缀和后缀,以及单元格内的填充:
MC - % +|
RET |
RET !(nb有+
)之前的空格
M-C - % ^|\||$
RET RET !
abc|efg|123|yes
xxx|bbb|cc|no
您可以将清理步骤记录为键盘宏(或编写函数),以便在一个步骤中执行它们。
答案 1 :(得分:2)
我刚刚发现了如何将数据导入SES(没有“ses-import”函数,但事实证明你可以简单地抽取制表符分隔的数据),所以这个答案比使用表格捕获更简单:)(除非你的数据包含标签,在这种情况下你需要解决这个问题)。
SES是Emacs中的实际电子表格应用程序。有关详细信息,请参阅其信息节点:
Ch i d m ses
RET 或 M - : (info "ses")
RET
处理数据:
*ses*
RET ses-mode
RET mark-whole-buffer
+ ses-export-tsv
)|
s KBD> RET <!/ KBD> 警告:我实际上遇到了在我的标准配置下进入SES的问题,但这个过程在emacs -q
下工作正常。 YMMV。
答案 2 :(得分:0)
我可以想到两种手动更新的方法(虽然这可能不是你想要的):
使用矩形添加或删除字符:
cua-mode
<C-return> ;; cua-set-rectangle-mark on first row
;; create a rectangle one character wide from first to last rows
;; type '1|' to create your new column.
录制宏以添加/删除列条目并重复整个文件。