问题描述:

在文件夹中有多个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」当中进行调用及匹配。

最终结果显示如下:

  

talend工具通过关键字来取得text文本中的数据的更多相关文章

  1. 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”

    1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...

  2. C# 创建text文本并写入数据

    /// <summary> /// 创建TXT文本并往里面写入数据 /// </summary> /// <param name="FileName" ...

  3. [SoapUI] Groovy在SoapUI里获取Text文本第一行数据

    // get external txt file datadef groovyUtils =new com.eviware.soapui.support.GroovyUtils(context)def ...

  4. 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据

    大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤. 文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字: TeeC ...

  5. c# 将文本中的数据快速导入到数据库(200万左右的数据量)

    1.sql2008中 list表,只有一个字段 Lvalue 2.文本大约256万的数据量 3.测试结果:用时36秒! string connStr = @"Data Source=.\SQ ...

  6. mysqldump工具,通过--where选项,导出指定表中指定数据?

    需求描述: 今天在使用mysqldump工具导出表的时候,考虑能不能导出满足条件的数据行,不要 将表都导出来,查找资料,通过--where选项,就可以实现目的,做个实验,在此记录下. 操作过程: 1. ...

  7. JAVA读取TXT文本中的数据

    现在在Demo.txt中存在数据: ABC 需要将ABC从文本文件中读取出来 代码片: import java.io.*; class FileReaderDemo { public static v ...

  8. Python-模块,以及使用文本中的数据

    模块导入: from math import pi as math_pi print math_pi     #相当于把pi取了个别名 # -*- coding: cp936 -*-from rand ...

  9. IO流的练习1 —— 随机获取文本中的信息

    需求:一个文本中有几个名字,随机从中获取一个名字 分析: A:首先把文本中的数据读出 B:再把数据存储到集合中 C:产生一个随机的索引 D:打印出这个索引对应的值 public static void ...

随机推荐

  1. react页面跳转 window.location.href和window.open的几种用法和区别

    https://www.cnblogs.com/Qian123/p/5345298.html

  2. Linux分区格式化

    格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除.格式化通常分为低级格式化和高级格式化.如果没有特别指明, ...

  3. Java的 「 “ 结构体 ”」 与 「 “ 自定义排序 ” 」

    Java里面的结构体可以靠class来实现,如果相对结构体进行排序,需要写一个接口,class 自定义的名字 implements Comparator<结构体(自己定义的class类的名字)& ...

  4. python 时间等待

    #coding=utf- import time t1=time.time() time.sleep() t2=time.time() print(t2-t1) 输出 3.00304102898

  5. Java+Bigdata学习路线

    Java+Bigdata学习路线 2019-05-28 07:04:33 @Auther:MrZhangxd STAGE 第一阶段:JAVA基础 |-第一阶段:JAVA基础 | |-可掌握的核心能力 ...

  6. BZOJ1856[Scoi2010]字符串——组合数学+容斥

    题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...

  7. Java8函数式编程的宏观总结

    1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...

  8. Redis客户端多线程跟多个连接不是一回事

    先抱怨一波,大国庆节的放假前一天的下班前15分钟,通知让我加班,因为一个Redis的bug,而这个bug我在1个半小时之前刚听说了个大概,心里很不情愿: 好了,说正事: 问题现象: bug是这样的,两 ...

  9. TynSerial文件序列(还原)

    TynSerial文件序列(还原) 1)下载文件 procedure TForm1.DownFile(filename: string); // 下载文件 var url: SockString; i ...

  10. idea备忘

    1.idea 最近打开的文件个数 File->Settings->Editor->General->Editor Tabs->Tab Closing Policy-> ...