Прочитайте Имя таблицы и Имена столбцов из файла.ctl в Java

Здравствуйте, я пытаюсь прочитать прочитанное имя таблицы и имена столбцов для 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_OFSE, LAV_CD_AMT, EXPRT_DT, DUA_INSRT_ID, DUA_INSRT_TMSTP, DUA_UPDT_ID, DUA_UPDT_TMSTP, DUA_VERS_NBR

В настоящее время мой результат

ALM_ LAV_ CD_ BSTG ПОЛЕ TERMINATED хвостового NULLCOLS ALM_ VERS_ ID ДЕСЯТИЧНЫХ ВНЕШНЕЕ NULLIF ALM_ VERS_ ID ЗАГОТОВКИ LAV_ CD-СИМ NULLIF LAV_ CD-ЗАГОТОВКА LAV_ CD_ OFSE ЦЕЛОГО ВНЕШНЕГО NULLIF LAV_ CD_ OFSE ЗАГОТОВКИ LAV_ CD_ AMT ДЕСЯТИЧНОГО ВНЕШНЕГО NULLIF LAV_ CD_ AMT ЗАГОТОВКА EXPRT_ DT ДАТА YYYY MM DD DUA_ INSRT_ ID CHAR NULLIF DUA_ INSRT_ ID BLANKS DUA_ INSRT_ TMSTP TIMESTAMP ГГГГ MM DD HH MI SS FF DUA_ UPDT_ ID CHAR NULLIF DUA_ UPDT_ ID BLANKS DUA_ UPDT_ МУФ ДУЭЛЬ ВРЕМЕНИ ПО ВРЕМЕНИ ДИФРОВОГО МЕНЯ ЗАГОТОВКИ NBR

1 ответ

Решение

Пожалуйста, посмотрите на решение C#, которое я написал для вас, чтобы обработать контрольные файлы. Я случайно назвал контрольный файл *.txt.

Кодировал синтаксический анализатор контрольного файла для обработки имени таблицы, всех имен столбцов в контрольном файле.

https://github.com/ranjancse26/ControlFileProcessor

Вы можете легко преобразовать код из C# в Java.

Другие вопросы по тегам