存档

‘软件’ 分类的存档

excel打开csv文件篡改问题/excel-数字-尾数变0-数字前加0

2010年4月28日 闫鹏 没有评论

整数据统计,用脚本从数据库里面导出来成csv后,提供给pm。但这还不算晚,pm有时候会说,提供给她的数据不会用…,打开后显示的结果不对…

具体原因就是打开的使用的excel,比如对于2010040190000100021110016400229这种数据,在excel里面就会变成2.0100401900001E+30。即使再excel里面再设置格式也不行了,数据已经被它认为是数字,被科学计数的方法给忽略了最后的部分了,通过设置单元格式恢复后,只能显示为2010040190000100000000000000000。

尾数就变0了,真是悲剧。同样,数字的前面也可能变零,还需要自己在数字前加0。

今天谷哥支援了一把,发现可以通过这种方式解决:

在excel2007里面,通过:数据-自文本,然后选好你的csv文件,进入下面提示框:

导入自文本

随后在下面的步骤中,将你需要的列选择成文本的:

选择列格式

这样,出来的结果就是正常的,可以直接给pm xls文件啦

分类: 软件 标签:

文件grep-选出两个文件中相同/不同的内容

2010年2月2日 闫鹏 没有评论

升级于2010-6-10,发现了一个bug,当时用notmatch模式时,如果文件2先eof将导致文件1中的内容没有输出

这个是最近做数据统计用的比较多的一个脚本,目的是根据key值,输出文件中相同或者不同的行。例如文件A的样子:

10000007^H_O
10000036^Hzerui
10000037^Hyanpeng_haha

文件B的样子:

10000037^Hyanpeng_haha

注意文件中的^H是一个字符,在vim中使用输入ctrl+v再输入ctrl+h就可以看到了,这里用它主要是起到文件不同列之间的分隔符作用

使用命令

php mygrep.php A B

可以得到“10000037^Hyanpeng_haha”这一行数据,使用命令

php mygrep.php A B “notmatch”

可以得到另外两行数据。

脚本默认使用第零列作为筛选依据,默认使用^H作为分隔符,在脚本中自己配置一下可以更改。脚本工作时,要求筛选依据是已排序的。对于排序,可以使用sort命令操作文件,sort通过-t参数指定分隔符,-f指定按照那一列进行排序。

mygrep.php的代码:

$base_file_name    = $argv[1];
$check_file_name   = $argv[2];
$mode              = isset($argv[3])?$argv[3]:false;

$field_index = 0;
$delimiter = ',';

//////////////////////////////////////////////////////////////
$base_file = @fopen($base_file_name, 'r');
$check_file = @fopen($check_file_name, 'r');
$read_base_file = true;
$compare_result = 0;
$readed_base_file_arr = array();

//以要检查的文件作为外层循环
while(!feof($check_file)){
    //读取要检查的文件
    $readed_check_arr = explode($delimiter, trim(fgets($check_file)));
    do{
        //读取基准文件
        if($read_base_file === true){
            $readed_base_arr = explode($delimiter, trim(fgets($base_file)));
        }   

        //作比较
        $compare_result = strcmp($readed_check_arr[$field_index], $readed_base_arr[$field_index]);
        $grep_flag = ($compare_result == 0);
        //如果是要取出不相等的数据
        //且检查key小于或等于基准key时,说明需要将检查key下移一行,即此比较key已经比较完成
        //此时如果比较结果相等则不输出,
        //如果比较结果不等,并且检查key大于基准key则输出,如果检查结果小于基准key,说明检查key要下移继续检查
        if($mode !== false && (strcmp($mode, "notmatch") == 0)
            && $compare_result >= 0){
            $grep_flag = !$grep_flag;
        }

        //print("comparing check=".$readed_check_arr[$field_index]." base=".$readed_base_arr[$field_index]." result=$compare_result
grep_flag=$grep_flag\n");

        if($grep_flag){
            print implode($delimiter, $readed_base_arr)."\n";
        }

        //总是设置为要读取,如果跳出循环,则由外面设置
        $read_base_file = true;

    //如果检查的key是大于基准的key,并且检查文件未到尾,则重新读取一行基准文件进行检查
    }while($compare_result > 0 && !feof($base_file));

    if(feof($base_file)){
        break;
    }

    //当检查key小于基准key时,不读取下个基准key,等于则是因为已经比较过,两个都需要读取
    if($compare_result < 0){
        $read_base_file = false;
    }
}

//当check_file结束了但是base_file未结束
do{
    print implode($delimiter, $readed_base_arr)."\n";
    $readed_base_arr = explode($delimiter, trim(fgets($base_file)));
}while(!feof($base_file));

fclose($check_file);
fclose($base_file);
分类: 程序员, 软件 标签:

linux的shell下文件批量改名

2010年1月27日 闫鹏 没有评论

以前写的一个小脚本,用在linux的shell批量修改大量文件名的情况下。昨天不小心删除了大量文件,找回的时候,又一次用到了它,在遇到大批量文件的时候,还是挺有效果的,共享一下。

用法:

1.将你要改名的文件都放在同一个文件夹下,运行”ls -l > oldnames”,然后“vi oldnames”,这时候看到的大概是这个样子:

total 1224
drwxrwxr-x   3 yanpeng yanpeng    4096 Sep 17 16:13 app
drwxrwxr-x   2 yanpeng yanpeng    4096 May 19  2009 bin
drwxrwxr-x   2 yanpeng yanpeng    8192 Jan 26 16:40 docpay

2.输入”ctrl+v”,移动光标,选中要删除的那一堆内容,其实就是文件名前面的那些列,输入“d”,得到的文件大概为

app
bin
docpay

3.删除掉第一行的空行,保存退出vi,然后”cp oldnames newnames”。

4.修改newnames文件中想要改名的文件为新文件名

5.将change_name.sh脚本放在你的那个放置文件的夹下,运行./change_name.sh就可以了(注意有执行权限,加执行权限的方法chmod a+x change_name.sh)

change_name.sh脚本内容,拷贝下,存好就能用了


#!/bin/sh

OLDNAMES='oldnames'
NEWNAMES='newnames'

fileline=`sed -n '$=' $OLDNAMES`
echo $fileline

index=1
while [ $index -le $fileline ]
do
oldname=`sed -n "${index}p" $OLDNAMES`
newname=`sed -n "${index}p" $NEWNAMES`
mv $oldname $newname
index=`expr $index + 1`
done
分类: 程序员, 软件 标签: ,

wordpress插件之持久化链接

2010年1月21日 闫鹏 1 条评论

安装permalink后(不安装的话,所有文章都的链接都是”/?post=id”的形式,不利于搜索引擎收录),要不就是用postid,要不就是用post的标题作为slug。但通常我们的标题都是中文的,每次写文章,还好再修改标题为英文才好…(为啥要英文的呢?url如果是中文,就会是一对的百分号,并且不利于seo)。
有没有帮助我们自动生成英文slug的插件呢?
wp slug translate可以使用文章的title去google请求翻译,然后帮你设置好文章的slug,这样,就可以使用英文的固定链接了
我以前的文章,都没有设置slug,怎么办?
cos_slug_converter可以将你以前的文章都设置一下slug,也是去google请求翻译,直接操作数据库,将文章的slug设置好
那我所有文章的链接地址都变了?
Permalink Redirect插件可以帮你做301永久重定向,如果你以前是用postid作链接的,只要在“Old Permalink Structures”填上以前的你的链接样子就可以了

分类: 互联网, 软件 标签:

用好你的vim

2010年1月20日 闫鹏 2 条评论

以前上学的时候,主要用java,Eclipse真是个好东东。上班后,开始用c,php,python等,越来越发现vim是一个好东东,如果不是写java的话,推荐大家投入vim的怀抱。
vim的根本性好处就是:写代码的时候,你的手腕不需要动。不需要动鼠标,不需要移动右手去按那个“上下左右”(当然是在你用hjkl的情况下)
基本的那些用vimtutor看看就好了,高级的应用里面,我接触到的一个是正则,另外一个是列编辑。建议大家写代码的时候,都列对齐,使用ctrl+v进行列编辑,简直太爽了。

关于vim的插件,都是放在在~/.vim文件夹中的,在这个文件夹下面有一些子文件夹

1.plugin。启动Vim时, 它自动载入一些全局的plugin,就是从这个目录里面读取的

2.ftplugin。这种插件是通过“:filetype plugin on”打开的,默认这个命令可以配置在~/.vimrc文件中,插件的作用比如是帮助控制缩进等,对python语言来说尤其重要

3.doc。这个可以放置一些plugin的帮助文件

上面的这些定义比较宽泛,是在vim手册里面描述的。另外,python推荐使用indent/python.vim,可以按照规范的控制python的缩进。

————问题的分割线————
问题:为啥不是写java就推荐vim呢?
回答:Eclipse可以根据java代码的编译情况,自动添加import选项,并且重构功能也很强大,是一个很好的选择。

分类: 程序员, 软件 标签:

河蟹社会下的xmarks

2009年10月26日 闫鹏 1 条评论

一直超超好用的firefox插件–xmarks最近也被河蟹了,实在是不知道为什么,这个完全是个人应用的服务,难道我们要一直向着大局域网前进前进前进进?

解决办法:

修改host文件(C:\Windows\System32\drivers\etc\hosts),加上:

64.147.188.86 www.xmarks.com
64.147.188.92 api.xmarks.com
64.147.188.89 login.xmarks.com
64.147.188.87 sync.xmarks.com
64.147.188.86 static.xmarks.com
64.147.188.86 download.xmarks.com
64.147.188.86 my.xmarks.com

然后,左键点击xmarks的图标,弹出设置菜单,选择“高级”,加密那个下拉框里面选择“全部加密”

————–我是xmarks扫盲分割线———————

xmark是firefox的一个小插件,可以保存你firefox中的书签,可以在你的多台电脑上自动同步书签,即使你的firefox是在u盘里面,也能够和你的各台电脑中的书签保持同步

分类: 互联网, 软件 标签: