有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字符串从中读取表名和列名。Java中的ctl文件

您好,我正在尝试读取sql查询的表名和列名以进行测试验证

我有一本书。ctl文件,该文件包含如图所示的表格详细信息

LOAD DATA APPEND INTO TABLE ALM_LAV_CD_BSTG FIELDS TERMINATED BY '~~' TRAILING NULLCOLS ( ALM_VERS_ID DECIMAL EXTERNAL NULLIF (ALM_VERS_ID=BLANKS) , LAV_CD CHAR NULLIF (LAV_CD=BLANKS) , LAV_CD_OFSE INTEGER EXTERNAL NULLIF (LAV_CD_OFSE=BLANKS) , LAV_CD_AMT DECIMAL EXTERNAL NULLIF (LAV_CD_AMT=BLANKS) , EXPRT_DT DATE "YYYY-MM-DD" , DUA_INSRT_ID CHAR NULLIF (DUA_INSRT_ID=BLANKS) , DUA_INSRT_TMSTP TIMESTAMP "YYYY-MM-DD HH24:MI:SS.FF6" , DUA_UPDT_ID CHAR NULLIF (DUA_UPDT_ID=BLANKS) , DUA_UPDT_TMSTP TIMESTAMP "YYYY-MM-DD HH24:MI:SS.FF6" , DUA_VERS_NBR DECIMAL EXTERNAL NULLIF (DUA_VERS_NBR=BLANKS) )

我的要求是将表名读入字符串,将列名忽略EXPRT_DT读入字符串

我的代码如下

package com.cf.ODSAutomation; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.filechooser.FileNameExtensionFilter; public class ReadControlFile { public static void main(String[] args) throws Exception { // Control Files Folder Path File path = new File("C:\\ODS\\control_File"); final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("Control Files", "ctl"); File[] files = path.listFiles(); System.out.println("Number of Control Files : " + files.length); // Looping the files in the folder for (final File file : path.listFiles()) { if (extensionFilter.accept(file)) { System.out.println("File Name : " + file.getName().trim()); BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuilder builder = new StringBuilder(); String currentLine = reader.readLine(); while (currentLine != null) { builder.append(currentLine); builder.append("\n"); currentLine = reader.readLine(); } // Appending all lines into single line System.out.println(builder.toString()); // Getting Table Name String temp[] = builder.toString().split("TABLE "); String temp1[] = temp[1].split("_BSTG"); String TableName = temp1[0].trim(); System.out.println("Table Name : " + TableName); Pattern p = Pattern.compile("[a-zA-Z]+_*"); Matcher m1 = p.matcher(temp[1]); System.out.println("Words from string \"" + temp[1] + "\" : "); while (m1.find()) { System.out.println(m1.group()); } reader.close(); } } } }

我可以使用Strings类读取表名,但无法获取列名

我希望得到的结果是将列名附加在一个字符串中,用逗号分隔,如下所示

ALM_VERS_ID、LAV_CD、LAV_CD_of SE、LAV_CD_AMT、EXPRT_DT、DUA_INSRT_ID、DUA_INSRT_TMSTP、DUA_UPDT_ID、DUA_UPDT_TMSTP、DUA_VERS_NBR

目前我的结果是

施舍_ 拉夫_ CD_ BSTG 领域 结束 通过 拖尾的 纳尔斯 施舍_ 弗斯_ 身份证件 十进制的 外部的 努利夫 施舍_ 弗斯_ 身份证件 空白 拉夫_ 光盘 烧焦 努利夫 拉夫_ 光盘 空白 拉夫_ CD_ OFSE 整数 外部的 努利夫 拉夫_ CD_ OFSE 空白 拉夫_ CD_ 金额 十进制的 外部的 努利夫 拉夫_ CD_ 金额 空白 出口_ DT 日期 YYYY 嗯 DD 杜瓦_ 插入_ 身份证件 烧焦 努利夫 杜瓦_ 插入_ 身份证件 空白 杜瓦_ 插入_ TMSTP 时间戳 YYYY 嗯 DD 啊 医疗保险 党卫军 FF 杜瓦_ UPDT_ 身份证件 烧焦 努利夫 杜瓦_ UPDT_ 身份证件 空白 杜瓦_ UPDT_ TMSTP 时间戳 YYYY 嗯 DD 啊 医疗保险 党卫军 FF 杜瓦_ 弗斯_ 丁腈橡胶 十进制的 外部的 努利夫 杜瓦_ 弗斯_ 丁腈橡胶 空白


共 (1) 个答案

  1. # 1 楼答案

    请看一下我为您编写的用于处理控制文件的C#解决方案。我碰巧把控制文件命名为*。txt

    编写了一个控制文件解析器,用于处理表名、每个控制文件的所有列名

    https://github.com/ranjancse26/ControlFileProcessor

    您可以轻松地将代码从C#逆向工程到Java