talend工具通过关键字来取得text文本中的数据
问题描述:
在文件夹中有多个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文本中的数据的更多相关文章
- 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”
1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...
- C# 创建text文本并写入数据
/// <summary> /// 创建TXT文本并往里面写入数据 /// </summary> /// <param name="FileName" ...
- [SoapUI] Groovy在SoapUI里获取Text文本第一行数据
// get external txt file datadef groovyUtils =new com.eviware.soapui.support.GroovyUtils(context)def ...
- 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据
大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤. 文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字: TeeC ...
- c# 将文本中的数据快速导入到数据库(200万左右的数据量)
1.sql2008中 list表,只有一个字段 Lvalue 2.文本大约256万的数据量 3.测试结果:用时36秒! string connStr = @"Data Source=.\SQ ...
- mysqldump工具,通过--where选项,导出指定表中指定数据?
需求描述: 今天在使用mysqldump工具导出表的时候,考虑能不能导出满足条件的数据行,不要 将表都导出来,查找资料,通过--where选项,就可以实现目的,做个实验,在此记录下. 操作过程: 1. ...
- JAVA读取TXT文本中的数据
现在在Demo.txt中存在数据: ABC 需要将ABC从文本文件中读取出来 代码片: import java.io.*; class FileReaderDemo { public static v ...
- Python-模块,以及使用文本中的数据
模块导入: from math import pi as math_pi print math_pi #相当于把pi取了个别名 # -*- coding: cp936 -*-from rand ...
- IO流的练习1 —— 随机获取文本中的信息
需求:一个文本中有几个名字,随机从中获取一个名字 分析: A:首先把文本中的数据读出 B:再把数据存储到集合中 C:产生一个随机的索引 D:打印出这个索引对应的值 public static void ...
随机推荐
- react页面跳转 window.location.href和window.open的几种用法和区别
https://www.cnblogs.com/Qian123/p/5345298.html
- Linux分区格式化
格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除.格式化通常分为低级格式化和高级格式化.如果没有特别指明, ...
- Java的 「 “ 结构体 ”」 与 「 “ 自定义排序 ” 」
Java里面的结构体可以靠class来实现,如果相对结构体进行排序,需要写一个接口,class 自定义的名字 implements Comparator<结构体(自己定义的class类的名字)& ...
- python 时间等待
#coding=utf- import time t1=time.time() time.sleep() t2=time.time() print(t2-t1) 输出 3.00304102898
- Java+Bigdata学习路线
Java+Bigdata学习路线 2019-05-28 07:04:33 @Auther:MrZhangxd STAGE 第一阶段:JAVA基础 |-第一阶段:JAVA基础 | |-可掌握的核心能力 ...
- BZOJ1856[Scoi2010]字符串——组合数学+容斥
题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...
- Java8函数式编程的宏观总结
1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...
- Redis客户端多线程跟多个连接不是一回事
先抱怨一波,大国庆节的放假前一天的下班前15分钟,通知让我加班,因为一个Redis的bug,而这个bug我在1个半小时之前刚听说了个大概,心里很不情愿: 好了,说正事: 问题现象: bug是这样的,两 ...
- TynSerial文件序列(还原)
TynSerial文件序列(还原) 1)下载文件 procedure TForm1.DownFile(filename: string); // 下载文件 var url: SockString; i ...
- idea备忘
1.idea 最近打开的文件个数 File->Settings->Editor->General->Editor Tabs->Tab Closing Policy-> ...