我被要求编写一个Java程序,它将TSV文件作为一个插注,并生成一个不同的TSV文件(其中有相当多的变化,在输入和参数上非常可变)作为输出。
这是一个相当大的程序(花了我3天的时间来编码,但我不擅长),它终于开始处理来自15k行的输入,生成1500K行输出。
写代码时,我不知道我必须在Talend中实现它,所以这是一个普通的Java程序,有4个参数:输入文件名,输出文件名,int,int
我设法把我的主要作为一个例程与所需的额外包(个人和openCSV)。
我的问题是:在Talend中实现它而不改变它是可能的吗?我不能告诉塔伦德,这是输入中的文件,这些是参数吗?我在昨天之前从未听说过塔伦德。
如果你感兴趣,这是主要的,但我相信我的问题是相当普遍的。
public static void main(String[] args) throws ArgsExceptions {
// Boolean set to true while everything is good
Boolean everythingOk = true;
String inputFile = null; // Name of the entry file to be transposed.
String outputFile = null; // Name of the output file.
int serieNb = 1 ; // Number of columns before the actual values in the input file. Can be columns describing the product as well as empty columns before the values.
int linesToCopy = 0; // Number of lines composing the header of the file (those lines will be copy/pasted in the output)
/*
* Handling the arguments first.
*/
try {
switch (args.length) {
case 0:
throw new EmptyArgsException();
case 1:
inputFile = args[0];
String[] parts = inputFile.split("\\.");
// If no outPutFile name is given, will add "Transposed" to the inputFile Name
outputFile = parts[0] + "Transposed." + parts[1];
break;
case 2:
inputFile = args[0];
outputFile = args[1];
break;
case 3:
inputFile = args[0];
outputFile = args[1];
serieNb = Integer.parseInt(args[2]);
break;
case 4:
inputFile = args[0];
outputFile = args[1];
serieNb = Integer.parseInt(args[2]);
linesToCopy = Integer.parseInt(args[3]);
break;
default:
inputFile = args[0];
outputFile = args[1];
serieNb = Integer.parseInt(args[2]);
linesToCopy = Integer.parseInt(args[3]);
throw new OutOfBordersArgsException();
}
}
catch (ArgsExceptions a) {
a.notOk(everythingOk);
}
catch (NumberFormatException n) {
System.out.println("Arguments 3 & 4 should be numbers."
+ " Number 3 is the Number of columns before the actual values in the input file. \n"
+ "(Can be columns describing the product as well as empty columns before the values. (1 by default)) \n"
+ "Number 4 is the number of lines to copy/pasta. (0 by default) \n"
+ "Please try again.");
everythingOk = false;
}
// Creating an InputFile and an OutputFile
InputFile ex1 = new InputFile(inputFile, linesToCopy);
OutputFile ex2 = new OutputFile(outputFile);
if (everythingOk) {
try ( FileReader fr = new FileReader(inputFile);
CSVReader reader = new CSVReader(fr, '\t', '\'', 0);
FileWriter fw = new FileWriter(outputFile);
CSVWriter writer = new CSVWriter(fw, '\t', CSVWriter.NO_QUOTE_CHARACTER))
{
ex1.setReader(reader);
ex2.setWriter(writer);
// Reading the header of the file
ex1.readHead();
// Writing the header of the file (copy/pasta)
ex2.write(ex1.getHeadFile());
// Handling the line containing the columns names
HeadOfValuesHandler handler = new HeadOfValuesHandler(ex1.readLine(), serieNb);
ex2.writeLine(handler.createOutputHOV());
// Each lien will be read and written (in multiple lines) one after the other.
String[] row;
CommonLine cl1;
// If the period is monthly
if (handler.isMonthly()) {
while (!ex1.isAllDone()) {
row = ex1.readLine();
if (!ex1.isAllDone()) {
cl1 = new CommonLine(row, handler.getYears(), handler.getMonths(), serieNb);
ex2.write(cl1.exportOutputLines());
}
}
}
// If the period is yearly
else {
while (!ex1.isAllDone()) {
row = ex1.readLine();
if (!ex1.isAllDone()) {
cl1 = new CommonLine(row, handler.getYears(), serieNb);
ex2.write(cl1.exportOutputLines());
}
}
}
}
catch (FileNotFoundException f) {
System.out.println(inputFile + " can't be found. Cancelling...");
}
catch (IOException e) {
System.out.println("Unknown exception raised.");
e.printStackTrace();
}
}
}
感谢您阅读本文!
不,不更改代码就无法在Talend中按原样使用代码。
但是,如果定义良好,则可以重新创建工作流。
编辑
正如54l3d所指出的,可以添加外部库并调用它们,如果只能完成少量额外工作,这似乎是一个很好的解决方案。如果环境需要,例如,如果有很多工作要维护,最好使用“本地”Talend。
如果需要保持原样,您可以将代码打包为任何可运行格式,然后通过TalendtSystem
组件调用它,如果是Jar文件,则通过tLibraryLoad
component调用它。
事情是这样的: 我被要求开发一个JAVA程序,该程序将对。tsv文件进行一些重组(移动单元格以进行某种换位)。 所以,我试着干干净净地做,现在得到了3个不同的包: 稍后将出现的另一个问题是,我不知道如何解析程序所需的参数。 不管怎样,谢谢你阅读这篇文章!
我正在实现一个Java图形库(学习...)。因此,我写了一个界面 作为实现的第一步,我正在编写实现上述接口的Digram类。然而,为了简单起见,我希望节点标识符为整数,因此我将函数定义为 但是,我遇到了错误,我需要用超类型覆盖或实现方法。有人可以向我解释这种行为的基础吗?此外,如果有人可以解释,我们如何设计允许灵活地添加任何类型组件的库。
问题内容: 我是否可以使用一组参数启动 Java WebStart 应用程序,就像用标记配置了applet一样? 谢谢 问题答案: 是的,您可以看到以下示例: 显示向您传递参数“ -user = bob”和“ -pass = 8jkaiuasu”到应用程序。以标准方式获取参数。
奖金f(a_3,(a_3+A_4)*4)可以捕捉所有的表达式,而不仅仅是(a_3,(a_3+A_4)?
我需要制作一个程序,从命令行获取可选参数。如果显示flag,我需要读取下面的正则表达式,并将其作为字符串保存到程序中。类似于: 我现在看到的是: 但是,当我从文件夹运行程序时,其中有些文件是和,程序将打印“file1.java”。如何使用“*.java”获取变量? 当我尝试打印所有参数时,使用: 它给了我: 这让我得出结论,我需要以不同的方式阅读参数...
本文向大家介绍Nginx 根据URL带的参数转发的实现,包括了Nginx 根据URL带的参数转发的实现的使用技巧和注意事项,需要的朋友参考一下 使用场景: 需要根据截取URL动态配置跳转路径,常见于访问内网不固定ip地址的文件图片, 请求地址:http://11.19.1.212:82/bimg4/32.52.62.42:222/DownLoadFile?filename=LOC:12/data/