求 Win 下复制文字后,自动统计字数并显示的工具

有同学问:

想找一个win平台,将文字选取复制到剪切板后自动统计字数并显示的工具,最近文字工作比较多。 ​​​

星河下电子荒原 同学提供了一个方案:

dragKing

假设没有这种软件,我们可能需要写一个出来
大多语言都能实现读取和监控剪贴板内容,这不是啥大问题,我认为主要问题有两个
1,UI设计:要让统计的字数以何种方式,在何处出现。弹窗提醒我认为不是一个好选择,用户只能查看一次;置顶一个小窗口来显示又太占用屏幕空间了。
2,用户设置:设置选项应该如何排布,使得其能够应对用户对中英文统计、无标点统计、无符号统计的不同需求

中文字数怎么计算,emoji 字数怎么计算……反正吧,挺复杂的其实

1 个赞

统计字数还蛮麻烦的,之前写过一个偷摸写小说的软件(就是只有一行、没有操作栏、背景可选颜色之类的),想加一个字数统计

就发现我的软件、word、Obsidian和某小说平台的字数都是不一样的,甚至一开始差距还蛮大的,调整了好几次才缩小了差距

以前搞过一个油猴脚本来统计字数:
https://greasyfork.org/scripts/10763

CopyQ 支持脚本.

其中有个API 是 Length. 可以统计字符串长度.

如果只是要长度信息, 不考虑剪贴板增强.

可以用AHK ,但是意义不大.

大概的代码如下, 没有优化, 所以如果2次复制的长度一样会不提示. 但是明白这点也不算bug.

#Persistent
SetTimer, testmt, 10
testmt:
a :=StrLen(clipboard)
sleep,100
b :=StrLen(clipboard)
;每一百毫秒,剪贴板送到a和b变量空间,
if(a<>b)
{
    Msgbox %b%
}
return
```


SoSo快速启动 刚好弄了一个 不知这样适不适合

1 个赞

https://wwgz.lanzouw.com/b00mouxvyb
密码:hpjc
搓了一个,看看能不能用
欢迎任何建议和批评!后续有需要会依照需求更新软件

歪个楼,有个 Linux 系统上的解决方案:命令行执行如下命令

watch -p 1 "xsel -ob | wc -m"

其中,

  • watch -p 1 代表每 1 秒运行一次后面引号中的命令,并输出运行结果
  • xsel -ob 用于将剪切板中的内容输出到终端中
  • wc -m 用于计算文本的字符数(但需注意,汉字、英文字母、阿拉伯数字、换行符都会算一个字符)

其实到最后,还是楼上的那个问题:以什么规则进行字数统计?

我的解决方案是统一使用或者转换为unicode编码,根据码区定位
参见部分我的解决方案实现

伪代码
// 每组大括号代表一个取值范围,例如0x20~0x2f
// 符合下列范围的取值均为英文字母标点
// 注解:定义能够在unicode官网找到
std::map<int, int> EnglishPunctuationRanges = {
    {0x20, 0x2F},
    {0x3A, 0x40},
    {0x5B, 0x60},
    {0x7B, 0x7E}
};

// 检查某字符在何取值范围内
bool CheckChar(std::map<int, int> ranges,int c)
{
    for (const auto& range : ranges)
        if (c >= range.first && c <= range.second)
            return true;

    return false;
}
1 个赞

我感觉三楼说的可能还有一层意思:涉及到像论文、报告、作文这种有字数要求的文书时,要用什么样的字数计数规则?比如,标点符号算不算字数?英文单词算几个字?阿拉伯数字算几个字?