将数据库字段转换成设计文档所需的字段

哈哈,出差这么久终于回来了,回家的感觉真好!
PowerDesigner的物理数据库一出来,设计文档中要改的字段就多得不计其数,如果要把PowerDesigner中的字段一个个Copy到设计文档中,那将会是一件非常痛苦的事情。于是我在项目中自己写了一个把从PowerDesigner的物理数据库中复制出来的字段转换成设计文档中所需要的字段名称,用来提高修改文档的工作效率。
把代码发上来与大家分享一下,我不太会写正则表达式,所以效率也不是很高,希望大家可以帮我完善一下代码,看看正则表达式要怎样写效率才是最高的。
因为涉及到我们的项目,所以对str.txt文件中数据库的字段进行了必要的屏蔽,希望大家可以谅解。


/*
* @(#)FileToStr.java 2010-4-28
*
* Copyright 2010 BianJing,All rights reserved.
*/
package test;

import java.io.BufferedReader;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 读取文本文件,将其内容转换成字符串,并用正则表达式替换获取指定的字符串。
* 该类在这里主要是对PowerDesigner或数据库中复制出来字符串进行匹配,将每行中的表字段提取出来
* 并转换成对应的字段名称或字段类型,用于编写设计文档等工作,以提高工作效率。
* 如:从PowerDesigner复制出来的一行字符串是"某某编码 XX_TYPE_CODE NVARCHAR2(64)",则
* 转换后得到的字符串是"xxTypeCode"。
* 注意:在你要用到的字符串之前的字符串中不能包含有英文字符,如果有应将其删除,
* 如:"某某ID XX_ID NVARCHAR2(32)",这里需要用到的字符串是"XX_ID",所以应将"XX_ID"之前
* 的字符串"某某ID"中包含的英文("ID")删除或者将整个"某某ID"删除。
*
* @author BianJing<br/>
* E-mail: vipbooks@163.com
* @version 2010-4-28
*/
public class FileToStr {
// 模式一
private static Pattern p1 = Pattern.compile("([\\w])([\\w]+)");
// 模式二
private static Pattern p2 = Pattern.compile("(.*)_([a-z])(.*)");

// 测试
public static void main(String[] args) {
String str = fileToStr("test/str.txt");

System.out.println(str);
}
/**
* 将文本文件转换成字符串
* @param filePath 文本文件完整的包路径
* @return 文本文件的字符表示形式
*/
public static String fileToStr(String filePath){
StringBuffer fileStr = null;
Reader reader = null;
BufferedReader bufReader = null;
try {
String realPath = getRealPath(filePath);
// 将文本文件封装到IO字符流中
reader = new FileReader(realPath);
bufReader = new BufferedReader(reader);

String str = null;
fileStr = new StringBuffer();
// 读取文本文件
while ((str = bufReader.readLine()) != null) {
// 查找与模式一相匹配的字符串
Matcher m1 = p1.matcher(str);
if (m1.find()) {
// 将查找到的第一组字符串转换成小字字母,如果首字母要大写则这里就不要调 toLowerCase()
String tempStr1 = m1.group(1).toLowerCase();
// 将查找到的第二组字符串转换成小字字母
String tempStr2 = m1.group(2).toLowerCase();

str = tempStr1 + tempStr2;
}

str = transform(str);

fileStr.append(str);
fileStr.append("\n");
}
} catch(NullPointerException e){
System.out.println("路径[" + filePath + "]无效!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bufReader != null){
try {
bufReader.close();
} catch (IOException e) {
e.printStackTrace();
}
bufReader = null;
}
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
reader = null;
}
}

if(fileStr != null)
return fileStr.toString();
else
return null;
}
/**
* 返回文本文件的真实物理路径
* @param filePath 文本文件完整的包路径
* @return 文本文件的物理路径
* @throws NullPointerException
*/
private static String getRealPath(String filePath) throws NullPointerException{
String realPath = FileToStr.class.getClassLoader().getResource(filePath).getFile();
realPath = realPath.replaceFirst("/", "");
// 如果URL地址中含有空格,则空格会被"%20"替换,所以要将它替换回来
realPath = realPath.replaceAll("%20", " ");

return realPath;
}
/**
* 查找与模式二相匹配的字符串,并将得到的字符串进行组合
* @param str
* @return str
*/
private static String transform(String str){
// 查找与模式二相匹配的字符串
Matcher m2 = p2.matcher(str);

if (m2.find()) {
String tempStr1 = transform(m2.group(1));
String tempStr2 = transform(m2.group(2));
String tempStr3 = transform(m2.group(3));

str = tempStr1 + tempStr2.toUpperCase() + tempStr3;
}

return str;
}
}


str.txt文件的内容:

某某编码 XX_TYPE_CODE NVARCHAR2(64) 64 FALSE FALSE TRUE
某某名称 XX_NAME NVARCHAR2(64) 64 FALSE FALSE TRUE
某某序号 XX_NO NUMBER(4) 4 FALSE FALSE TRUE
某某类型 XX_TYPE_CODE NVARCHAR2(64) 64 FALSE FALSE FALSE
某某信息 XX_INFO NVARCHAR2(200) 200 FALSE FALSE FALSE
某某标签 XX_LABEL NVARCHAR2(200) 200 FALSE FALSE FALSE
高度 HEIGHT NUMBER(5,2) 5 2 FALSE FALSE TRUE
宽度 WIDTH NUMBER(5,2) 5 2 FALSE FALSE FALSE
深度 DEPTH NUMBER(5,2) 5 2 FALSE FALSE FALSE
某某方式 XX_WAY_CODE NVARCHAR2(64) 64 FALSE FALSE FALSE
位置 POSITION NVARCHAR2(200) 200 FALSE FALSE FALSE
某某图形 XX_IMAGE NVARCHAR2(200) 200 FALSE FALSE FALSE
某某原因 XX_REASON NVARCHAR2(200) 200 FALSE FALSE FALSE
备注 REMARK NVARCHAR2(1000) 1000 FALSE FALSE FALSE
展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值