给苦逼课代表的福利–使用二维码和Android手机统计作业数量




最近英语老师不知道收了什么刺激,让我每天收英语作业时要统计没交作业的人,更可恶的是,老师那个名单不知道是用什么野生的规则排的序,名字的顺序完全是乱的,以至于我每次统计作业都需要10分钟+…..

由于我对Android开发一无所知,所以也就无法开发普通的java应用,于是我选择使用一个shell脚本,读取二维码扫描器(我用的是一个开源项目zxing)扫描的历史记录,然后与一个包含全班学号的文本文件进行比对,然后输出没有被扫描到的学号。这个方法虽然有效,但是十分简单粗暴,由于需要从/data分区中读取其他应用的数据,所以需要root权限。

e3

一共需要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

这篇文章只是提供一个思路和基本的解决方案,脚本目前很不完善,仍然可以大幅度优化。另外这篇文章写得比较仓促,很多地方没有说清楚,等有时间我会再完善。




Posted

in

by

Comments

发表回复/Leave a Reply

您的电子邮箱地址不会被公开。/Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.