piapia123
zh

按列截取

文本

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

从每一行里取出想要的那几段。两种「列」是两件事,所以分成两个模式: 按分隔符 —— 一行是一条记录,分隔符切出来的每一段是一列。CSV、日志、`姓名,电话,地址` 这类数据用这个。 按字符位置 —— 一行是一串字符,取「第 5 个字到第 12 个字」。定宽文本、旧系统的固定字段、以及「每行只留前 20 个字」用这个。 合并成一个模式的话,「第 2 列」这句话在两份数据上指的东西不同,用户没法表达自己说的是哪一种。 列号支持负数,而且按每一行自己的长度算。 `-1` 是这一行的最后一项 —— 数据长短不齐时(有的行 3 列、有的 5 列),「最后一列」只能这么表达。取不到的项给空串而不是报错:一行有问题就让整批用不了,那太苛刻了;配合「丢弃空行」开关,这些行是留着占位还是丢掉由你决定。

功能

  • 两种模式:按分隔符分列 / 按字符位置截取
  • 列号支持 `2`、`2-4`、`1,3,5-7` 三种写法,逗号或空格分隔
  • 负数从末尾数,且按每一行自己的长度算,长短不齐也取得对
  • 分隔符支持 `\t` 转义与多字符(如 `::`)
  • 取不到的项留空并保持行数一一对应,也可以勾选直接丢掉
  • 按字符位置模式按字形簇数位,emoji 算一位
  • 列号写法看不懂时直接报错,而不是给一份空结果
  • 全程在浏览器本地计算,内容不上传

使用方法

  1. 把每行一条记录的数据粘贴进输入框
  2. 选模式:按分隔符分列,还是按字符位置截取
  3. 填要取的列号(例如 `2` 或 `2-4`)
  4. 点「复制」取走结果

常见问题

为什么写 `2 - 4` 会报错?
因为逗号与空格都算列号之间的分隔符,`2 - 4` 会被拆成三项:`2`、`-`、`4`,其中 `-` 是个读不懂的写法。范围里不能有空格,写成 `2-4` 即可。这里刻意选择报错而不是把 `-` 忽略掉:静默取错列的结果看起来完全正常,而用户要到用数据时才会发现。
为什么有些行跑出来是空的?
因为那一行取不到你要的列 —— 比如数据只有 2 列,而你要的是第 3 列。这是设计如此:取不到就空着,行数保持与输入一一对应,你才能把结果与原数据对齐着看。想让这些行直接消失,把「丢弃取不到内容的行」勾上。
负数是怎么数的?
`-1` 是这一行的最后一项,`-2` 是倒数第二项。关键是它按每一行自己的长度算:三行的数据分别是 5 列、3 列、4 列时,`-1` 取到的都是各自的最后一项。这也是为什么列号必须在每一行上单独解析,而不能在整段文本上算一次。负数可以和区间一起用(`-3--1` 取最后三项)。

相关工具