问题描述:
每天都会生成一定的txt文件,txt文件当中含有复数个个人的信息,把每个个人信息都抽出来之后放到Excel文件的一览里面。
解决思路:
1.txt文件里面的信息有多件,每一件生成一个临时的文件。
2.读取临时的文件之后放到Excel的一览里面。
3.考虑到二次执行的时候,要把临时的文件和前一次的数据给删除。
talend的具体的流程如下图:
解释说明:
①为了第二次可以执行,所以在此处先删除临时文件夹里面的临时文件
代码如下:
// 当「コンポーネント」で、下記コードを書きます
// パラメータ「context.dataSourcePath」がContxtで、設定する、
outputDataConver.fileDel(context.dataSourcePath + "temp");
// 在「コード」⇒「ルーチン」で、新しいクラスを作成し、下記の方法を作成
// 一時ファイル削除
public static void fileDel(String path){
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
for (File fileItem : files) {
fileItem.delete();
}
}
}
②此处的目的是想把「tJava3」的代码都执行结束之后再向下执行。
生成方式是·「tJava5」⇒「右キーを押し」⇒「トリガー」⇒「サブジョブがOKの場合」
③④⑤为了实现在第二次执行的时候,把第一次执行的数据要删除的功能,再次要检索一下,当前的数据文件里面有没有当天的数据
③的生成方式是·「メタデータ」⇒「Excelファイル」⇒「右キーを押し」⇒「Excelファイル作成する」
④只是匹配两端的数据
⑤要判断有没有执行过一次数据,即当天的数据是否含有
// 当日のデータがあれば、パラメータが”FLASE”を設定する // パラメータ「context.dataDelFg 」がContxtで、設定する、初期値が”true”に設定する if(( new SimpleDateFormat("yyyyMMdd").format(new Date())).equals(input_row.O) ){ context.dataDelFg = "false"; }
⑥临时的一个控件,为了方便加判断条件。添加方式是鼠标选择在控件「tJava5」⇒「右キーを押し」⇒「トリガー」⇒「条件付く実行」
if(order:1)的判断条件("false".equals(context.dataDelFg ))
if(order:2)的判断条件("true".equals(context.dataDelFg ))
⑦⑧⑨此处是想实现,删除当天的数据生成临时的文件
⑧处的设定如下
⑩处的实现利用临时生成的文件把目标文件给覆盖,即拷贝
⑪利用事前准备好的模板把临时生成的临时文件给恢复到最初的状态
⑫把单个txt文件里面的复数个个人信息给生成到,一个文件一个个人信息里面
// キーワード:名前 String keyFileName =context.dataSourcePath + "氏名.txt"; List<String> keyFileNameList = outputDataConver.getKeyWord(keyFileName); // キーワード:性別 String keyFileSex = context.dataSourcePath + "性別.txt"; List<String> keyFileSexList = outputDataConver.getKeyWord(keyFileSex); // キーワード:年齢 String keyFileAge = context.dataSourcePath + "年齢.txt"; List<String> keyFileAgeList = outputDataConver.getKeyWord(keyFileAge); // キーワード:経験年数 String keyFileExperience=context.dataSourcePath + "経験.txt"; List<String> keyFileExperienceList = outputDataConver.getKeyWord(keyFileExperience); // キーワード:最寄駅 String keyFileStation = context.dataSourcePath + "最寄駅.txt"; List<String> keyFileStationList = outputDataConver.getKeyWord(keyFileStation); // キーワード:日本語レベル String keyFileLevel = context.dataSourcePath + "日本語レベル.txt"; List<String> keyFileLevelList = outputDataConver.getKeyWord(keyFileLevel); // キーワード:スキル String keyFileSkill = context.dataSourcePath + "スキル.txt"; List<String> keyFileSkillList = outputDataConver.getKeyWord(keyFileSkill); // キーワード:業種 String keyFileIndustry = context.dataSourcePath + "業種.txt"; List<String> keyFileIndustryList = outputDataConver.getKeyWord(keyFileIndustry); // キーワード:希望単価 String keyFilePrice = context.dataSourcePath + "希望単価.txt"; List<String> keyFilePriceList = outputDataConver.getKeyWord(keyFilePrice); // 指定のパス下のファイル取得 String path = context.dataSourcePath +( new SimpleDateFormat("yyyyMMdd").format(new Date()))+ "\"; List<String> fileNameList = outputDataConver.traverseFolder(path); for(String fi:fileNameList){ String name = fi.replace(path,""); File file = new File(fi); FileWriter writer=null; try (InputStreamReader fr = new InputStreamReader(new FileInputStream(file), "SJIS"); BufferedReader reader = new BufferedReader(fr)) { String temp = ""; String kkcy1 = context.dataSourcePath + "temp/" + name.substring(0,name.length()-4); String kkcy2= name.substring(name.length()-4, name.length()); int index = 0; boolean flag = true; boolean sexFlag = true; boolean ageFlag = true; // TXTファイル内容読み取り while ((temp = reader.readLine()) != null) { String nameStr = outputDataConver.keyWord(temp, keyFileNameList); if (!"".equals(nameStr)){ if(!flag){ writer.close(); flag = true; } File fileText = new File(kkcy1 +"_" + index + kkcy2); writer=new FileWriter(fileText); index = index + 1; writer.write("名前:" + nameStr.trim()); writer.write(" "); writer.write("会社:" + name); writer.write(" "); sexFlag = false; ageFlag = false; flag = false; } if (!sexFlag){ String sexStrHs = outputDataConver.keyWordSex(temp); if(!sexStrHs.equals("")){ sexFlag = true; writer.write("性別:" + sexStrHs.trim() ); writer.write(" "); } } String sexStr = outputDataConver.keyWord(temp, keyFileSexList); if (!"".equals(sexStr)){ writer.write("性別:" + sexStr.trim() ); writer.write(" "); } if (!ageFlag){ String ageStrHs = outputDataConver.keyWordAge(temp); if(!ageStrHs.equals("")){ ageFlag = true; writer.write("年齢:" + ageStrHs.trim() ); writer.write(" "); } } String ageStr = outputDataConver.keyWord(temp, keyFileAgeList); if (!"".equals(ageStr)){ writer.write("年齢:" + ageStr.trim()); writer.write(" "); } String experienceStr = outputDataConver.keyWord(temp, keyFileExperienceList); if (!"".equals(experienceStr)){ writer.write("経験年数:" + experienceStr.trim()); writer.write(" "); } String stationStr =outputDataConver. keyWord(temp, keyFileStationList); if (!"".equals(stationStr)){ writer.write("最寄駅:" + stationStr.trim()); writer.write(" "); } String levelStr = outputDataConver.keyWord(temp, keyFileLevelList); if (!"".equals(levelStr)){ writer.write("日本語レベル:" + levelStr.trim()); writer.write(" "); } String skillStr = outputDataConver.keyWord(temp, keyFileSkillList); if (!"".equals(skillStr)){ writer.write("スキル:" + skillStr.trim().replace(",","、")); writer.write(" "); } String industryStr = outputDataConver.keyWord(temp, keyFileIndustryList); if (!"".equals(industryStr)){ writer.write("業種:" + industryStr.trim()); writer.write(" "); } String priceStr = outputDataConver.keyWord(temp, keyFilePriceList); if (!"".equals(priceStr)){ writer.write("希望単価:" + priceStr.trim()); writer.write(" "); } } } catch(FileNotFoundException e) { throw new Exception(e); }finally{ if(writer != null) { writer.close(); } } }
⑬⑭⑮⑯实现把每一个文件的个人信息写到Excel里面
⑬的设定
⑭的代码
String fileName = context.dataSourcePath + "temp/"+ ((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) { System.out.print("Excel:"+temp); if (temp.indexOf("名前:") >= 0){ strTemp[0] = temp.replace("名前:", "") + ","; } if (temp.indexOf("性別:") >= 0){ strTemp[1] = temp.replace("性別:", "") + ","; } if (temp.indexOf("年齢:") >= 0){ strTemp[2] = temp.replace("年齢:", "") + ","; } if (temp.indexOf("経験年数:") >= 0){ strTemp[3] = temp.replace("経験年数:", "") + ","; } if (temp.indexOf("最寄駅:") >= 0){ strTemp[4] = temp.replace("最寄駅:", "") + ","; } if (temp.indexOf("日本語レベル:") >= 0){ strTemp[5] = temp.replace("日本語レベル:", "") + ","; } if (temp.indexOf("スキル:") >= 0){ strTemp[6] =temp.replace("スキル:", "") + ","; } if (temp.indexOf("業種:") >= 0){ strTemp[7] = temp.replace("業種:", "") + ","; } if (temp.indexOf("希望単価:") >= 0){ strTemp[8] = temp.replace("希望単価:", "") + ","; } if (temp.indexOf("会社:") >= 0){ strTemp[9] = temp.replace("会社:", "") + ","; } } 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); }
⑯的设定
常量的设定