工作中的小技巧–文本处理

熟练掌握一些工具能够在工作中大大提高效率。

举个实际的例子。有一个电子表格文件(Excel),要将其中的一个Sheet中的某些列导入到MySQL数据库中。

有一个同事的做法是写程序解析Excel然后再插入数据库中,这个做法肯定是可行的。

就算一个高级程序员写这个程序最快也要10–20分钟吧。

其实不需要写任何程序就可以做到,只要把Excel中相关的列生成SQL就可以了。

首先将Excel另存为CSV格式(逗号分割的数据),然后用编辑器(例如:VIM)打开CSV格式。用块操作删除掉不需要的列,保留需要的列。剩下的列和数据库中的列一致了。

假如数据如下:

vm001,1.1.1.1,beijing

假如把这条数据插入到数据库中对应的SQL语句是:

insert into TABLE (name,ip,zone) values('vm001','1.1.1.1','beijing');

替换方式就可以做到了。

首先将‘行头’换成  insert into TABLE(name,age,sex) values(‘
vim 命令模式:

:%s/^/insert into TABLE(name,ip,zone) values('/g

结果:

insert into TABLE(name,age,sex) values('vm001,1.1.1.1,beijing

然后将,换成 ‘,’

:%s/,/’,'/g
结果:

insert into TABLE(name,age,sex) values('vm001','1.1.1.1','beijing

将结尾换成 ‘);
:%s/$/’);/g
结果:

insert into TABLE(name,age,sex) values('vm001','1.1.1.1','beijing');

在MySQL控制台中执行

$>source xxx.sql

就完成了数据的导入。。。。整个过程不超过5分钟。。

有人说为什么要另存为CSV 格式呢?直接从Excel中复制需要的列不就行了吗?
肯定是可以的,但当Excel数据超过几万行的时候,这种复制很慢的(因为这个复制不单纯是字符串的复制,还有COM对象之类的)。

不用vim替换也可以,用UE等文本编辑器也可以实现替换。。

最后想说的就是充分利用好工具,能够提升工作效率。。。

分享到: 更多