zoukankan      html  css  js  c++  java
  • talend工具整理文件并出力文件到Excel当中

    问题描述:

    每天都会生成一定的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);
    			  }
    

      ⑯的设定

    常量的设定

  • 相关阅读:
    Linux学习总结(十一)—— Linux常用命令:版本信息查看(RedHat、CentOS、Debian、Ubuntu、Fedora、Oracle)...
    Linux学习总结(十一)—— Linux常用命令:版本信息查看(RedHat、CentOS、Debian、Ubuntu、Fedora、Oracle)...
    Linux 操作系统原理 — 进程与线程管理
    sed 变量替换
    触类旁通:那些关于 TBL$OR$IDX$PART$NUM 的诡异案例和知识
    python 追加库路径
    python 模块
    生成器
    深入解析:DB2 V10.5新特性列式存储表的优点与缺点
    赚钱项目轻度揭秘:旧手机回收背后的暴利内情
  • 原文地址:https://www.cnblogs.com/killclock048/p/9223870.html
Copyright © 2011-2022 走看看