`
ccxw1983
  • 浏览: 27035 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

集合的运算、打印(打印表名、编码、pdm中所属包方便人工判断)、保存

 
阅读更多
工具的开发背景:
crm系统以ework为基础改造而来,以前简单起见和ework混合了代码和表的,现在需要分析,就需要重新分析,哪些是共用的,哪些是私有的。
通过日志中打印的表名,可以分析出哪些表是crm独有的。
通过pdm文件表的创建记录确定哪些表是新表,新的表少,再除去crm独有的,所以方便人工检查哪些是crm专有的。

另外分析了us系统那边用到的表(那边用到的就肯定不能公用),
cas、权限、用户、组织单位、数据字典的肯定是公用的。
另外考虑以前开发中折中,偷懒,有些方法混合了ework、crm一方使用无需用到的表,目前一时没法剥离,需要确定备忘。

总体思路:
日志(或初始化sql脚本)或pdm中分析出来的表名列表结果分别存到集合包里面,通过里面的CollectionTool.java做集合的运算、打印(打印表名、编码、pdm中所属包方便人工判断)、保存。

工具编写匆忙,可能有少量bug和注释不统一的地方,不懂的请研究代码,恕不做技术支持。

这是集合的操作工具。
package chenxiaowen.tool.collections;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeSet;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.DocumentException;

import chenxiaowen.tool.pdm.PdmParser;
import chenxiaowen.tool.pdm.pojo.PhysicalDiagram;
import chenxiaowen.tool.pdm.pojo.Table;

/**
 * 管理各个集合的表名列表,进行集合的加、减、交集,打印、保存、和pdm文件对应查找
 * @author 陈小稳 33881270@qq.com
 *
 */
public class CollectionTool {
	public static HashMap<String, TreeSet<String>> fileTables = new HashMap<String, TreeSet<String>>();
	public static String encoding = "UTF-8";
	public TreeSet<String> tables = new TreeSet<String>();

	static {
		// 集合里面每个txt文件记录一个表名集合,这里以表名首字母为key存储了每个集合到 fileTables
		File baseLogResultDir = new File(
				"D:\\workspace\\sqltablename\\src\\chenxiaowen\\tool\\collections");
		File[] fs = baseLogResultDir.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				return name.endsWith(".txt");
			}
		});
		for (int i = 0; i < fs.length; i++) {
			File f = fs[i];
			String baseName = FilenameUtils.getBaseName(f.getAbsolutePath());
			String fileFirstName = baseName.charAt(0) + "";
			try {
				String txt = FileUtils.readFileToString(f, encoding);
				String[] names = txt.split(",");
				TreeSet<String> namesSet = new TreeSet<String>();
				for (int j = 0; j < names.length; j++) {
					String name = StringUtils.trimToNull(names[j]);
					if (StringUtils.isNotEmpty(name)) {
						namesSet.add(name);
					}
				}
				if (namesSet.isEmpty()) {
					System.err.println("文件的表集合为空 " + baseName);
				} else {
					System.out.println("解析了表集合 " + baseName);
				}
				fileTables.put(fileFirstName, namesSet);
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException();
			}
		}
	}

	/**
	 * @param args
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws Exception {
		CollectionTool tool = new CollectionTool();
		// System.out.println("-----------------------");
		// tool.init("1").add("2").print();
		// System.out.println("-----------------------");
		// tool.init("1").add("c").remove("2").print2();

		tool.init("1").add("2").writeCollectionFile("3.txt");
	}

	/**
	 * 打印表名
	 */
	public void print() {
		TreeSet<String> a = this.getSet();
		for (Iterator iterator = a.iterator(); iterator.hasNext();) {
			String name = (String) iterator.next();
			System.out.println(name + ",");
		}
	}

	/**
	 * 打印表名到文件
	 * 
	 * @throws IOException
	 */
	public void writeCollectionFile(String filename) throws IOException {
		TreeSet<String> a = this.getSet();
		writeCollectionFile(filename, a);
	}

	/**
	 * 打印表名到文件
	 * 
	 * @param filename
	 *            输出到集合目录的文件名称
	 * @param a
	 *            表名集合
	 * @throws IOException
	 */
	public static void writeCollectionFile(String filename, TreeSet<String> a)
			throws IOException {
		File file = new File(getCollectionDir(), filename);
		StringBuffer b = new StringBuffer();
		for (Iterator iterator = a.iterator(); iterator.hasNext();) {
			String name = (String) iterator.next();
			b.append(name);
			b.append(",\r\n");
		}
		System.out.println(b.toString());
		FileUtils.writeStringToFile(file, b.toString(), encoding);
	}

	/**
	 * 集合目录
	 * 
	 * @return
	 */
	public static File getCollectionDir() {
		String x = CollectionTool.class.getResource("").getPath().replace(
				"bin", "src");
		// System.out.println(new File(x).getAbsolutePath());
		return new File(x);
	}

	/**
	 * 打印包名-表名
	 * 
	 * @throws DocumentException
	 */
	public void print2() throws DocumentException {
		String[] pdmFiles = new String[] { "D:\\Desktop\\common.pdm",
				"D:\\Desktop\\crm.pdm" };
		PdmParser parseTool = PdmParser
				.parseTablesAndPhysicalDiagrams(pdmFiles);
		// <表code,表>
		HashMap<String, Table> codeTableMap = parseTool.getCodeTableMap();
		// <表id,表所属PhysicalDiagram>
		HashMap<String, PhysicalDiagram> idPhysicalDiagramMap = parseTool
				.getIdPhysicalDiagramMap();

		TreeSet<String> toprinttables = this.getSet();
		System.out.println("表编码\t\t表名\t\t包名");
		for (Iterator iterator = toprinttables.iterator(); iterator.hasNext();) {
			String code = (String) iterator.next();
			Table table = codeTableMap.get(code);
			if (table == null) {
				System.err.println(code + "\t pdm不存在该表");
			} else {
				String name = table.getName();
				PhysicalDiagram symbol = idPhysicalDiagramMap
						.get(table.getId());
				if (symbol == null) {
					System.err.println(code + "\t" + name
							+ "\tpdm中该表只存在于tables不在模块中");
				} else {
					String packname = symbol.getName();
					System.out.println(code + "\t" + name + "\t" + packname);
				}
			}
		}
	}

	/**
	 * 初始
	 * 
	 * @param collectionName
	 * @return
	 */
	public CollectionTool init(String collectionName) {
		TreeSet<String> c = fileTables.get(collectionName);
		this.setSet(c);
		return this;
	}

	/**
	 * 加
	 * 
	 * @param collectionName
	 * @return
	 */
	public CollectionTool add(String collectionName) {
		TreeSet<String> a = this.getSet();
		TreeSet<String> b = fileTables.get(collectionName);
		if (b == null) {
			throw new RuntimeException("集合 " + collectionName + " 不存在");
		}
		TreeSet<String> c = bingji(a, b);
		this.setSet(c);
		return this;
	}

	public CollectionTool jia(String collectionName) {
		return jia(collectionName);
	}

	public CollectionTool jian(String collectionName) {
		return jian(collectionName);
	}

	/**
	 * 减
	 * 
	 * @param collectionName
	 * @return
	 */
	public CollectionTool remove(String collectionName) {
		TreeSet<String> a = this.getSet();
		TreeSet<String> b = fileTables.get(collectionName);
		if (b == null) {
			throw new RuntimeException("集合 " + collectionName + " 不存在");
		}
		TreeSet<String> c = jian(a, b);
		this.setSet(c);
		return this;
	}

	/**
	 * 交集
	 * 
	 * @param collectionName
	 * @return
	 */
	public CollectionTool cross(String collectionName) {
		TreeSet<String> a = this.getSet();
		TreeSet<String> b = fileTables.get(collectionName);
		if (b == null) {
			throw new RuntimeException("集合 " + collectionName + " 不存在");
		}
		TreeSet<String> c = jiaoji(a, b);
		this.setSet(c);
		return this;
	}

	/**
	 * 并集 a∪b 一个包含所有a的元素以及b的元素的集合
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static TreeSet<String> bingji(TreeSet<String> a, TreeSet<String> b) {
		TreeSet<String> c = new TreeSet<String>();
		c.addAll(a);
		c.addAll(b);
		return c;
	}

	/**
	 * 获得a中独有的元素的集合
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static TreeSet<String> jian(TreeSet<String> a, TreeSet<String> b) {
		TreeSet<String> c = new TreeSet<String>();
		for (Iterator iterator = a.iterator(); iterator.hasNext();) {
			String name = (String) iterator.next();
			if (!b.contains(name)) {
				c.add(name);
			}
		}
		return c;
	}

	/**
	 * a∩b:获得a也有b也有的元素的集合
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static TreeSet<String> jiaoji(TreeSet<String> a, TreeSet<String> b) {
		TreeSet<String> c = new TreeSet<String>();
		for (Iterator iterator = a.iterator(); iterator.hasNext();) {
			String name = (String) iterator.next();
			if (b.contains(name)) {
				c.add(name);
			}
		}
		return c;
	}

	public TreeSet<String> getSet() {
		return tables;
	}

	public void setSet(TreeSet<String> tables) {
		this.tables = tables;
	}

}
分享到:
评论

相关推荐

    C语言集合运算器课设报告

    4.1 并集运算模块:通过遍历两个集合,将所有元素添加到新集合中,去除重复。 4.2 交集运算模块:比较两个集合的元素,将共有的元素放入新集合。 4.3 差集运算模块:对一个集合进行遍历,检查元素是否存在于另一个...

    天云双色集合运算

    天云双色集合运算 V2014 Vol7.06 x86 Realease

    数据结构课程设计—集合运算

    在集合运算中,链表可以用来存储集合的元素,并实现集合的合并、交集和差运算。 知识点三:集合运算的算法思想 集合运算的算法思想是定义一个链表,链表有整型数据和一个指向链表的指针。然后,程序包含定义一个新...

    c语言实现集合运算

    4. **判断元素是否属于集合**:检查一个元素是否存在于集合中。在数组中,可以通过遍历数组来查找;在链表中,需要从头节点开始逐个比较。 5. **集合的并集**:返回两个集合的所有元素,不考虑重复。在C语言中,...

    离散数学集合运算C++或C语言实验报告.pdf

    本实验报告主要介绍了离散数学中集合运算的C++或C语言实现,包括交运算、并运算、差运算和补运算。实验中使用了数组来表示集合,并使用了循环语句和条件语句来实现集合运算。 实验目的 掌握用计算机求集合的交、并...

    (C++)简单集合运算

    在编程领域,集合运算是一种常见的数据处理操作,特别是在算法设计和数据结构中。本文将深入探讨C++中如何实现简单的集合运算,包括并集、交集、差集以及笛卡尔积,并结合具体代码实例进行解释。 首先,让我们理解...

    数据结构(C语言版)综合实践集合运算

    7. 集合运算 (单循环链表) 1.问题描述: 设有两个带头结点的单循环链表存储的集合A、B,其元素类型为字符或者整形,且以非递减方式存储,其头结点分别为ha、hb。要求下面各问题中的结果集合同样以非递减方式存储,...

    数据结构 集合运算

    在本主题中,“数据结构 集合运算”主要关注的是集合这一特殊的数据结构及其在C语言环境下的操作。集合是一种非常基础且重要的数据结构,它包含一组不重复的元素。在C语言中,集合可以由数组、链表或更高级的数据...

    集合运算_集合运算问题_

    集合运算问题。设计一个程序,实现两个集合的并集、交集、差集、显示输出等,要求结果集合中的元素不重复;实现一个集合的幂集的求解。

    数据结构课程设计之集合运算

    本课程设计的主题——“集合运算”,聚焦于集合理论在编程中的实际运用,旨在提升学生的算法设计和问题解决能力。在这个设计中,我们将探讨如何利用各种数据结构实现集合的基本操作,如并集、交集、差集等。 首先,...

    集合运算程序

    在编程领域,集合运算是一种常见的数据处理方式,尤其在算法设计和分析中占有重要地位。本项目名为“集合运算程序”,使用C++编程语言实现,提供了Windows操作界面,旨在帮助初学者理解和应用集合与关系的运算法则。...

    链表实现集合运算 链表实现集合交并差运算

    链表实现集合运算 链表实现集合交并差运算

    数据结构—集合运算实现 实现报告(含代码)

    在本报告中,我们将探讨一种特殊的数据结构——集合,以及如何用编程语言(如Java)来实现集合的常用运算,包括相等运算、并运算、包含和差运算。这个实现主要基于单链表数据结构,旨在让学生掌握单链表的基本操作,...

    数据结构-集合运算.docx

    数据结构中的集合运算通常涉及到集合的基本操作,如交集、并集、差集以及对称差等。在本设计题目中,集合A和B通过单链表进行存储,元素类型为int,且按照非递减顺序排列。以下是设计的具体内容和实现要求: 1. **...

    集合的运算

    - **集合运算**:可以使用迭代器配合条件判断进行集合运算,或者使用STL中的`set_intersection`、`set_union`、`set_difference`和`set_symmetric_difference`算法函数。 5. **代码示例** - `set_intersection`:...

    jihe.rar_集合 交并差 运算_集合 运算_集合运算

    在编程领域,集合运算是一种常见的数据处理操作,特别是在算法设计和数据分析中。本文将深入探讨“集合_交并差_运算”这一主题,以及如何在实际应用中进行这些操作。 集合是一个包含唯一元素的数据结构,它支持多种...

    集合运算及关系运算

    在下不才初学java,用java写了一个求两个集合的集合运算,若程序中有漏洞请各位大虾指出谢谢啦!

    集合运算器代码

    关于对集合的交差并补运算,子集与元素的判定

    实现集合各种运算的程序

    在IT领域,集合运算是一种基础且重要的概念,尤其在编程中。本文将深入探讨如何使用C语言实现集合的各种运算,并基于提供的"实现集合各种运算的程序"进行详细讲解。 首先,我们要理解集合的基本概念。在数学中,...

    数据结构课程设计----集合的并、交和差运算

    选作内容扩展了项目的难度,包括元素判定(检查元素是否属于集合)、子集判定(判断一个集合是否为另一个的子集)、求补集(集合中不存在于另一个集合的元素)以及将元素类型扩展到其他类型。 总的来说,这个课程...

Global site tag (gtag.js) - Google Analytics