问题描述:
在文件夹中有多个text文本,通过关键字来取得text文本里面我所需要的数据,并出力到Excel里面。取得的数据,在text文本里面可能是多行的存在,并且在Excel里面是一行的存在。
解决方法:
解决方法,在talend工具里面加入控件「tjava」,之后写入java代码来读取text文本文件,之后利用stringBuffer来处理成字符串的形式,在此阶段把text文本里面的多行数据形成一行之后向下一个阶段传值。
下图是用talend工具画的示意图
选择tjava_2之后再「コンポーネント」里面编辑Java代码。并且在「Conexts」里面可以设定参数[context],在下面的代码当中最重要的代码是[
context.txtStr = strBuData.toString();
row1.txtStr = context.txtStr;]
String fileName = "C:/メール格式/"+( new SimpleDateFormat("yyyyMMdd").format(new Date()))+"/"+ ((String)globalMap.get("tFileList_1_CURRENT_FILE")); File file = new File(fileName);
try (InputStreamReader fr = new InputStreamReader(new FileInputStream(file), "SJIS");
BufferedReader reader = new BufferedReader(fr)) { String temp = ""; String[] strTemp= {",",",",",",",",",",",",",",",",","}; while ((temp = reader.readLine()) != null) { if (temp.indexOf("名前") > 0){
strTemp[0] = temp + ",";
} if (temp.indexOf("性別") > 0){
strTemp[1] = temp + ",";
} if (temp.indexOf("年齢") > 0){
strTemp[2] = temp + ",";
} if (temp.indexOf("経験年数") > 0){
strTemp[3] = temp + ",";
} if (temp.indexOf("最寄駅") > 0){
strTemp[4] = temp + ",";
}
if (temp.indexOf("日本語レベル") > 0){
strTemp[5] = temp + ",";
}
if (temp.indexOf("スキル") > 0){
strTemp[6] = temp + ",";
}
if (temp.indexOf("業種") > 0){
strTemp[7] = temp + ",";
}
if (temp.indexOf("希望単価") > 0){
strTemp[8] = temp + ",";
}
} StringBuilder strBuData = new StringBuilder();
for(int i = 0; i < strTemp.length; i++){
strBuData.append(strTemp[i]);
} context.txtStr = strBuData.toString();
row1.txtStr = context.txtStr; } catch(FileNotFoundException e) {
throw new Exception(e);
}
在「详细设定」里面导入你所写的Java代码所需要的包文件。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.InputStreamReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Map;
以上就是对「tjava_2」控件的编辑及代码的做成。
「tjava_1」控件的作用是对所生成的数据进行各种各样的判断。例如:需要截取所传参数的多少位,之后显示在Excel里面。所需要的代码如下:
选中控件「tjava_1」在「コンポーネント」里面编辑下列代码。
String foo = "bar"; outputDataConver.setName("input");
outputDataConver.setSex("input");
outputDataConver.setAge("input");
outputDataConver.setKkns("input");
outputDataConver.setMyk("input");
outputDataConver.setLebel("input");
outputDataConver.setSkill("input");
outputDataConver.setGysyr("input");
outputDataConver.setCost("input");
之后再左侧的工具栏中选中「コード」⇒「ルーチン」下,新创建一个class类之后编辑下面的代码。
package routines; public class outputDataConver { public static String setName(String str) {
if (!str.equals("")) {
String[] ret = str.split(",");
return ret[0].substring(ret[0].trim().indexOf("名前") + 4,
ret[0].length());
}
return "";
} public static String setSex(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 1) {
retVal = ret[1].substring(ret[1].trim().indexOf("性別") + 4,
ret[1].length()).toString();
}
}
return retVal;
}
return "";
} public static String setAge(String str) {
if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 2) {
retVal = ret[2].substring(ret[2].trim().indexOf("年齢") + 4,
ret[2].length()).toString();
}
}
return retVal;
}
return ""; } public static String setKkns(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 3) {
retVal = ret[3].substring(
ret[3].trim().indexOf("経験年数") + 6, ret[3].length())
.toString();
}
}
return retVal;
}
return "";
} public static String setMyk(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 4) {
retVal = ret[4].substring(ret[4].trim().indexOf("最寄駅") + 5,
ret[4].length()).toString();
}
}
return retVal;
}
return "";
} public static String setLebel(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 5) {
retVal = ret[5].substring(
ret[5].trim().indexOf("日本語レベル") + 8,
ret[5].length()).toString();
}
}
return retVal;
}
return "";
} public static String setSkill(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 6) {
retVal = ret[6].substring(ret[6].trim().indexOf("スキル") + 5,
ret[6].length()).toString();
}
}
return retVal;
}
return ""; } public static String setGysyr(String str) { if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 7) {
retVal = ret[7].substring(ret[7].trim().indexOf("業種") + 3,
ret[7].length()).toString();
}
}
return retVal;
}
return ""; } public static String setCost(String str) {
if (!str.equals("")) {
String[] ret = str.split(",");
String retVal = "";
for (int i = 0; i < ret.length; i++) {
if (i == 8) {
retVal = ret[8].substring(
ret[8].trim().indexOf("希望単価") + 3, ret[8].length())
.toString();
}
}
return retVal;
}
return "";
} public static String setKsy(String str) {
return str;
} }
之后在控件「tMap」当中进行调用及匹配。
最终结果显示如下: