Jfinal导入txt试题

public void doFile(){
UploadFile file = getFile("getfile");
File examFile = file.getFile();
GetQuestionFile ss = new GetQuestionFile();

boolean stat = ss.readTxtFile(examFile.toString());

if(stat){
renderEasyUISuccess("导入成功!");
} else {
renderEasyUIError("导入失败!");
}

}

------------------------------------------------------------------------

public boolean readTxtFile(String filePath){
try {
String encoding="GBK";
File file=new File(filePath);
if(file.isFile() && file.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String line = null;
long tkzyId = 0L; //专业名称
long tkqustionTypeId=0L; //题目id
String tkquestion =null; //提干
List<String> tkoption = null; //选项
String tkanswer =null; //答案
String tkexplain = null; //答案解析
long questionId = 0L; //题目Id
while((line = bufferedReader.readLine()) != null){

//处理txt --begin
if (isBlankline(line)) {
//跳过空行
} else if (isHandline1(line)) {
String[] zymcs = StrKit.splitEx(line, "、");
String zymc = zymcs[1];
ResClassifyModel resModel = ResClassifyModel.dao.findFirst("SELECT * from ResClassify where name=?",zymc);
tkzyId=resModel.getId();

} else if (isHandline2(line)) {
String[] questions = StrKit.splitEx(line, "、");
String[] questionTypes = StrKit.splitEx(questions[1], "(");
tkqustionTypeId=changeQuestionType(questionTypes[0]);

} else if (isQuestion(line)) {
tkquestion = getQuestion(line);;

} else if (isAnswer(line)) {

if(tkoption==null){
tkoption= new ArrayList<String>();
}
tkoption.addAll(getAnswers(line));

} else if (isReferenceAnswer(line)) {

tkanswer = getReferenceAnswer(line);
tkexplain = getAnswerAnalysis(line);

questionId = IdKit.newUid();
CttQuestionModel model = new CttQuestionModel();
model.set("id", questionId);
model.setDescription(tkquestion);
model.setAnswer(tkanswer);
model.setIsEnable(true);
model.setDifficulty(2);
model.setExplain(tkexplain);
model.setQuestionTypeId(tkqustionTypeId);
model.setZyId(tkzyId);
model.setAddTime(new Date());
model.setAddUser(ShiroKit.getCurrentUser().getUserCode());
model.setIsShow(true);

model.save();
if(tkqustionTypeId==1L||tkqustionTypeId==2L){
CttQuestionOptionModel optionModel = new CttQuestionOptionModel();
if(tkoption!=null){
for (int j=0;j<tkoption.size();j++) {
optionModel.set("id", IdKit.newUid());
optionModel.set("questionId", questionId);
optionModel.set("xh", j+1);
optionModel.set("description", tkoption.get(j));
optionModel.set("sourceType", 1);

String[] ans = StrKit.splitEx(tkanswer, ",");
for (String str : ans) {
if(str.charAt(0) - ‘A‘==j){
optionModel.set("isRight", true);
}else{
optionModel.set("isRight", false);
}
}

optionModel.save();
}

tkoption = null;
}
}
}

//处理txt --end
}
read.close();
return true;
}else{
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}

}

private static boolean isBlankline(String line) {
if (line.matches("^[ \\s]*$")) {
return true;
}
return false;
}

private static boolean isHandline1(String line) {
if (line.matches("^第[一-龥]+部分、[一-龥]+$")) {
return true;
}
return false;
}
private static boolean isHandline2(String line) {
if (line.matches("^[一-龥]+、[一-龥]+([0-9]+[大]?[题道])$")) {
return true;
}
return false;
}
private static boolean isQuestion(String line) {
if (line.matches("^\\d+[.\\.\\s]+.+$")) {
return true;
}
return false;
}

private static boolean isAnswer(String line) {

if (line.matches("^[A-Z][.\\.、\\s]+.+$")) {
return true;
}

return false;
}

private static boolean isReferenceAnswer(String line) {

if (line.matches("(?:参考)?答案[::\\s]+.+$")) {
return true;
}
return false;
}

public long changeQuestionType(String question){
long questionTypeId = 0L;
if(question.equals("单选题")){
questionTypeId=1L;
}else if(question.equals("多选题")){
questionTypeId=2L;
}else if(question.equals("填空题")){
questionTypeId=3L;
}else if(question.equals("判断题")){
questionTypeId=4L;
}else if(question.equals("简答题")){
questionTypeId=5L;
}
return questionTypeId;
}

//切割选项
private static List<String> getAnswers(String line) {
List<String> list = new ArrayList<String>();
String[] arr = line.split("[A-Z][.\\.\\s]+");
for (int i = 0; i < arr.length; i++) {
String answer = arr[i].trim();
if (StrKit.isEmpty(answer)) {
continue;
}
list.add(answer);
}
return list;
}
//切割题目
private static String getQuestion(String line) {
return line.replaceFirst("^\\d+[.\\.\\s、]+", "");
}
//答案解析切割
private static String getAnswerAnalysis(String line) {
return line.replaceAll("(?:参考)?答案[::\\s]+[A-Z×√]+[;;。.\\s]*(.*)$", "$1");
}
//切割答案
private static String getReferenceAnswer(String line) {
String s = line.replaceAll("(?:参考)?答案[::\\s]+([A-Z×√]+).*$", "$1");

if ("√".indexOf(s)>=0) {
return "1";
}else if("×".indexOf(s)>=0){
return "0";
}

String result = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (result.length()>0) {
result += ",";
}
result += String.valueOf(c);
}
return result;
}

时间: 2024-10-07 20:38:45

Jfinal导入txt试题的相关文章

MySQL导入txt文件

"Flufy","Harold","cat","f","1993-2-4" "claws","Gwen","cat","m","1994-3-17" "Brower","Diane","dog","m","1994-3-

MySQL导入txt数据及导出整个数据库或者数据库某个表的方法

MySQL导入txt数据 例: create schema foursquare_nyc; use foursquare_nyc; create table checkins(    userid int not null auto_increment,    originid varchar(30),    locationid varchar(40),    x double,    y double,    primary key(userid) ); load data local in

mysql使用load导入txt文件所遇到的问题及解决方法

导入txt文件,有导入向导这种方式: 另外可以使用load的方式导入.最开始使用以下代码插入: load data local infile 'F:\\Data\\predict_data.txt' into table weibo_predict_data (id,uid,mid,time,forward_count,comment_count,like_count,content); 由于一直报错"[Err] 1300 - Invalid utf8 character string:&quo

导入txt文件到SQL SERVER 2008

最近在学习数据库,想要试处理大量数据.大量的数据手动输入是不可能的了,所以需要导入.本人上网看了不少的教程,然后下载了txt格式的一万条彩票开奖记录数据.但是把这些数据导入到SQL Server 2008中仍然花费了一天半的时间.上网上找的教程始终没有很好的解决我在导入过程中的遇到的问题.为此写这篇博客以供参考!下面先图解导入步骤,最后再说注意事项.(本篇博客只对菜鸟有用) 第一步,打开导入导出工具.(win7 32位系统下SQL自带,64位系统下好像要装) 第二步,选择源文件的格式.这里txt

SQL导入txt以及SQL中的时间格式操作

原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表名" 比如我文件的具体位置为"f:\\dataset\\beijing\\xx.txt",创建的表名为"person",则上述指令的具体表达为: load data local infile "f:\\dataset\\beijing\\xx.txt

Mysql 8.0 导入txt文件操作(课程实验)

一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件导入数据库; 2.掌握使用查看和修改mysql文件操作的全局变量 三.实验步骤: 1.用cmd登录root权限的sql服务器(由于mysql8.0在Windows10上,安全权限问题,普通用户权限无法成功导入文件或进行文件操作.反复查询了各大技术网站也未能成功实现.) 所以命令如下:   以上结果即

正则法导入txt文本

package cc.pubone.project.gsexam.temp; import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Date;import java.util.List; import cc.pubone.framework.Config;import cc.p

Excel2010工作表中如何导入txt文件

1.打开Excel2010,点击"数据"选项卡,然后在最左边的"获取外部数据"菜单中选择"自文本"选项,在"导入文本文件"窗口中选择需要导入的文件.如图: 2.打开"文本导入向导-步骤之1(共3步)"对话框中并选择"分隔符号"选项.点击"下一步". 3.打开"文本导入向导-步骤之2"对话框,并添加分列线,点击"下一步"按钮. 4

如何利用matlab来导入txt文件,并按照自己的现实格式输出来

1. 文本264stream_720_2zhen.txt中存储的数据如图1所示 图 1 要导入的数据截图 2. MATLAB中读入数据的命令,由于数据之间间隔2个空格,所以fscanf格式中[‘%x’  ]中括号中加入了两个空格 %read data from txt fid= fopen('264stream_720_2zhen.txt','r'); YUV = fscanf(fid,['%x'  ]); fclose(fid); 图 2 matlab中读入的数据 3.输出数据到文本,数据以2