这两星期姚哥让我做实现一个二进制生成文件,输入xls文件:每个条目是一项正则表达式,标准参照regex文档;要求每一项正则表达式,转化为对应二进制串,主要是里面的转义字符转化;输出文件格式:二进制数据长度(4个字节)| 二进制数据 | 下一项长度 | 下一项数据 ... ... 1.首先这个项目我选择使用java开发,选择使用了jxl.jar文件(这个文件里面带的函数可以读取到excel单元格的内容)。=======================================================================
我的工作是首先是在excel中输入正则表达式,正则表达式要满足正则表达式的语法规则。而我们做的DFA,要求扩展字符集的范围为(0~255)所以我所定义的正则表达式为 1.可显示的字符"a"就输字符"a"。或写字符对应的十六进制"/0x61". 2.对于不可显示的字符就写其对应的十六进制如 "/0xff"等等。
下面是我的代码:
import java.io.*;
import jxl.*;
public class AppTest2
{
//Calculation excel within a cell the number of regular expressions
int countNum (String s)
{
char[] ch = s.toCharArray();
int contentLength = ch.length;
int num = 0;
for(int k=0;k<contentLength; k++)
{
if(ch[k] == 92)
{
k++;
if(k < contentLength)
{
if(ch[k] == 48)
{
k++;
if(ch[k] == 120)
{
k++;
k++;
num++;
}
}
else
{
k--;
num++;
}
}
else
{
num++;
}
}
else
{
//k--;
num++;
}
}
return num;
}
//put the excel cell content to the file
void outputTotxt()
{
try
{
Workbook book= Workbook.getWorkbook(new File("inputRE.xls"));
Sheet sheet=book.getSheet(0);//Get the first worksheet object
Cell cell;
int totalRows = sheet.getRows();//Get the number of rows
// System.out.println( " "+totalRows);
int totalColumns = sheet.getColumns();//Get the number of columns
// System.out.println( " "+totalColumns);
File myFilePath = new File("F://outputRE.txt");
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileOutputStream resultFile = new FileOutputStream(myFilePath);
PrintStream myFile = new PrintStream (resultFile);
for(int i=0;i<totalRows ;i++ )
{
for(int j=0;j<totalColumns ;j++ )
{
cell = sheet.getCell(j, i);
String content = cell.getContents();//Enter the cell contents to the file
char[] contentByte = content.toCharArray();//Enter the cell contents length to the file
int contentLength = contentByte.length;
// System.out.println( " "+content);
int temp = 0;
int num =0;
myFile.write(countNum(content));
for(int k=0;k<contentLength; )
{
if(contentByte[k] == 92)
{
k++;
if(contentByte[k] == 48)
{
k++;
if(contentByte[k] == 120)
{
k++;
switch(contentByte[k])
{
case '0' :
num = 16*0;
break;
case '1' :
num = 16*1;
break;
case '2' :
num = 16*2;
break;
case '3' :
num = 16*3;
break;
case '4' :
num = 16*4;
break;
case '5' :
num = 16*5;
break;
case '6' :
num = 16*6;
break;
case '7' :
num = 16*7;
break;
case '8' :
num = 16*8;
break;
case '9' :
num = 16*9;
break;
case 'a' :
num = 16*10;
break;
case 'b' :
num = 16*11;
break;
case 'c' :
num = 16*12;
break;
case 'd' :
num = 16*13;
break;
case 'e' :
num = 16*14;
break;
case 'f' :
num = 16*15;
break;
default :
break;
}
k++;
switch(contentByte[k])
{
case '0' :
num = 0+ num;
break;
case '1' :
num = 1+ num;
break;
case '2' :
num = 2+ num;
break;
case '3' :
num = 3+ num;
break;
case '4' :
num = 4+ num;
break;
case '5' :
num = 5+ num;
break;
case '6' :
num = 6+ num;
break;
case '7' :
num = 7+ num;
break;
case '8' :
num = 8+ num;
break;
case '9' :
num = 9+ num;
break;
case 'a' :
num = 10+ num;
break;
case 'b' :
num = 11+ num;
break;
case 'c' :
num = 12+ num;
break;
case 'd' :
num = 13+ num;
break;
case 'e' :
num = 14+ num;
break;
case 'f' :
num = 15+ num;
break;
default :
break;
}
myFile.write(num);
k++;
}
}
else
{
k--;
myFile.write(contentByte[k]);
k++;
myFile.write(contentByte[k]);
k++;
}
}
else
{
myFile.write(contentByte[k]);
k++;
}
}
}
// System.out.println();
}
myFile.close();
resultFile.close();
book.close();
}catch(Exception e)
{
System.out.println("the input excel file has error!"+" ");
}
}
public static void main(String args[])
{
AppTest2 test = new AppTest2();
test.outputTotxt();
}
}