需求如下:
将 index.txt 的内容进行格式转换后复制到剪贴板.
index.txt
莲子心中苦, 梨儿腹内酸.-- 明末清初. 金圣叹
雨入花心, 自成甘苦. 水归器内, 各现方圆.-- 明末清初. 金圣叹
真读书人天下少, 不如意事古今多.-- 明末清初. 金圣叹
转换后
- {
- "content": "莲子心中苦, 梨儿腹内酸.-- 明末清初. 金圣叹"
- },
- {
- "content": "雨入花心, 自成甘苦. 水归器内, 各现方圆.-- 明末清初. 金圣叹"
- },
- {
- "content": "真读书人天下少, 不如意事古今多.-- 明末清初. 金圣叹"
- },
流程如下
读取 index.txt 中的内容
生成一个 copy.bat 文件, 写入 clip <result.txt
将转换后的内容保存到 result.txt , 写入文件是考虑到特殊字符会导致命令执行失败
因为 clip 命令只支持 GBK 编码, 但是 Node.JS 在写入文件时不支持 GBK 编码, 则需要 iconv-lite 进行转码, 否则中文会出现乱码.
执行 copy.bat, 实现内容复制到剪贴板, 删除 copy.bat 和 ``result.txt ```
代码如下:
- const file_os = require("fs");
- const contentStr = file_os.readFileSync("index.txt", "utf-8");
- const exec = require('child_process').exec;
- const iconv = require('iconv-lite');
- let sentenceList = contentStr.split("\r\n").filter((sentence) => sentence != "").map((sentence) => ({ content: sentence }));
- let resultStr = JSON.stringify(sentenceList);
- resultStr = resultStr.substring(1, resultStr.length - 1);
- resultStr = iconv.encode(resultStr, 'gbk');
- copyToClipboard(resultStr, () => {
- console.log('已经复制到剪切板');
- })
- function copyToClipboard(text, func) {
- let resultfileName = "result.txt";
- let command = `clip < ${resultfileName} `;
- file_os.writeFileSync(resultfileName, resultStr);
- var cmdFileName = 'copy.bat';
- file_os.writeFileSync(cmdFileName, command);
- exec(cmdFileName, function (err, stdout, stderr) {
- if (err || stderr) return console.log(err, stdout, stderr);
- // 用 Node.JS 删除文件
- file_os.unlinkSync(cmdFileName);
- file_os.unlinkSync(resultfileName);
- func(text, stdout);
- });
- };
文件结构
iconv-lite 需要自己安装, 入口文件 index.txt
image.PNG
来源: http://www.jianshu.com/p/00344d68c0a2