最近英语老师不知道收了什么刺激,让我每天收英语作业时要统计没交作业的人,更可恶的是,老师那个名单不知道是用什么野生的规则排的序,名字的顺序完全是乱的,以至于我每次统计作业都需要10分钟+…..
由于我对Android开发一无所知,所以也就无法开发普通的java应用,于是我选择使用一个shell脚本,读取二维码扫描器(我用的是一个开源项目zxing)扫描的历史记录,然后与一个包含全班学号的文本文件进行比对,然后输出没有被扫描到的学号。这个方法虽然有效,但是十分简单粗暴,由于需要从/data分区中读取其他应用的数据,所以需要root权限。
一共需要3个脚本,其实本来一个就够了,但为了方便修改就分成了3个。
代码如下:
运行w.sh (需要su权限)
#w.sh
echo "================================"
echo "clear history? y/n [enter]"
read yn
if [ "${yn}" = "y" ];then //如果输入y则删除历史记录文件
rm /data/data/com.google.zxing.client.android/databases/barcode_scanner_history.db
echo "history cleared."
fi
am start -n com.google.zxing.client.android/com.google.zxing.client.android.CaptureActivity //启动zxing的capture activity
echo "press enter to continue .."
read -n 1
sqlite3 /data/data/com.google.zxing.client.android/databases/barcode_scanner_history.db<1.sql 调用sql脚本,将sql数据库的某个表输出到文本0.txt
export d=$(date +"%Y%m%d")
date>>/sdcard/hw/log/$d.txt
grep -v -f 0.txt list.txt> /sdcard/hw/inp.txt 将0.txt与list.txt (包含全班学号)进行比对,并将0中不包含但list中包含的行输出并重定向至inp.txt
sh o.sh //执行o.sh
cat outp.txt //在屏幕上打印outp.txt并重定向
cat outp.txt >>/sdcard/hw/log/$d.txt
echo "result saved to $d.txt"
#o.sh
sed -n 's/0000/0000aaaa/gp' inp.txt > outp.txt (将学号替换为学号+名字)(为了省事我使用的是很笨的办法,代码还可以大幅度优化)
sed -n 's/1111/1111bbbb/gp' inp.txt >> outp.txt
#1.sql
.output /sdcard/hw/0.txt
select text from history;
.exit
这篇文章只是提供一个思路和基本的解决方案,脚本目前很不完善,仍然可以大幅度优化。另外这篇文章写得比较仓促,很多地方没有说清楚,等有时间我会再完善。
发表回复/Leave a Reply