Talend:将数据文件拆分为两个流/流(标题信息、数据行)

Talend:将数据文件拆分为两个流/流(标题信息、数据行),talend,Talend,求你了,我不需要任何解决方案,只需要一些提示就可以了。无论如何,我要解决的问题是: 我有一个文件(彭博回答文件),其构建如下: 我们有一个标题部分(我只对 起始字段[…]结束字段;字段数量不同!) 然后是数据部分:起始数据[…]结束数据。其中每行:unique|u id | some|u val | some|u val | EXCH|u code | id|BB|u GLOBAL | NAME | SECURITY|TYP | TICKER\n 缩短的示例文件: START-OF-FILE

求你了,我不需要任何解决方案,只需要一些提示就可以了。无论如何,我要解决的问题是:

我有一个文件(彭博回答文件),其构建如下:

  • 我们有一个标题部分(我只对 起始字段[…]结束字段;字段数量不同!)
  • 然后是数据部分:起始数据[…]结束数据。其中每行:
    unique|u id | some|u val | some|u val | EXCH|u code | id|BB|u GLOBAL | NAME | SECURITY|TYP | TICKER\n
缩短的示例文件:

START-OF-FILE
RUNDATE=20150921
PROGRAMFLAG=oneshot

DATEFORMAT=yyyymmdd_sep
FIRMNAME=dl111111
FILETYPE=pc
REPLYFILENAME=r150921020044_20426_01_00
SECMASTER=yes
DERIVED=yes
CREDITRISK=yes
USERNUMBER=1111111
WS=0
SN=111111
CLOSINGVALUES=yes
SECID=BB_GLOBAL
PROGRAMNAME=getdata

START-OF-FIELDS
EXCH_CODE
ID_BB_GLOBAL
NAME
SECURITY_TYP
TICKER
END-OF-FIELDS

TIMESTARTED=Mon Sep 21 01:01:18 BST 2015
START-OF-DATA
BBG004C5BLW2|0|5|LABUAN INTL FIN|BBG004C5BLW2|1MDB GLOBAL INVESTMENTS|EURO-DOLLAR|OGIMK|
BBG000MGZ064|0|5|HK|BBG000MGZ064|361 DEGREES INTERNATIONAL|Common Stock|1361|
BBG000QVRHX9|0|5|AV|BBG000QVRHX9|3BG EMCORE CONVRT GLB-A|Open-End Fund|EMBDGCA|
BBG000BP52R2|0|5|US|BBG000BP52R2|3M CO|Common Stock|MMM|
BBG0068TPTD9|0|5|TRACE|BBG0068TPTD9|51JOB INC|US DOMESTIC|JOBS|
BBG0069D1BR3|0|5|NOT LISTED|BBG0069D1BR3|51JOB INC|EURO-DOLLAR|JOBS|
BBG000BJD1D4|0|5|US|BBG000BJD1D4|51JOB INC-ADR|ADR|JOBS|
BBG008CTTWK1|0|5|FRANKFURT|BBG008CTTWK1|AABAR INVESTMENTS PJSC|EURO MTN|AABAR|
BBG008D4J9S9|0|5|FRANKFURT|BBG008D4J9S9|AABAR INVESTMENTS PJSC|EURO MTN|AABAR|
BBG008B2BXH2|0|5|SIX|BBG008B2BXH2|AARGAUISCHE KANTONALBANK|DOMESTIC|KBAARG|
BBG0016WJL30|0|5|LX|BBG0016WJL30|AB-AMERICAN INCOME PT-ATEURH|Open-End Fund|ABAATEH|
BBG006F3D598|0|5|BH|BBG006F3D598|ABBEY CAPITAL DAILY FUTURE-B|Fund of Funds|ABBDFUB|
END-OF-DATA
TIMEFINISHED=Mon Sep 21 01:03:22 BST 2015
END-OF-FILE
现在是我的问题 如何将此文件拆分为两个流(字段名称;数据行)? 我的问题是:

  • 正则表达式组件仅在行级别工作
  • tFileInputMSDelimited确实没有给我带来任何东西
  • 我不想开始手工解析文件(tJava)。。。还是我必须
感谢您提前提供的任何提示,
Marco

我会使用tJavaFlex和一些Java代码。如果你看一下实际的代码,即使你并不真正了解java,也不难理解它是如何工作的

开始:

boolean header = false;
boolean data = false;
String headerData = "";
String line;
主要内容:

完:


希望这有帮助。

我会使用tJavaFlex和一些Java代码。如果你看一下实际的代码,即使你并不真正了解java,也不难理解它是如何工作的

开始:

boolean header = false;
boolean data = false;
String headerData = "";
String line;
主要内容:

完:


希望这有帮助。

不需要java代码,请查看这项非常简单的工作:

通常,标题具有固定的行数,因此我们只需要处理行数:

  • tFileInputDelimited1:标题11和限制5
  • tFileInputDelimited2:页眉20和页脚3

如果你有一个动态的行位置,试着找到这些位置,把它们保存在变量中,然后根据变量使用这个作业。您也可以参考我的答案。

无需编写java代码,请查看这个非常简单的作业:

通常,标题具有固定的行数,因此我们只需要处理行数:

  • tFileInputDelimited1:标题11和限制5
  • tFileInputDelimited2:页眉20和页脚3

如果你有一个动态的行位置,试着找到这些位置,把它们保存在变量中,然后根据变量使用这个作业。您也可以参考我的答案。

我很确定,如果您添加计算这些数字的部分(页眉跳过、页眉限制、数据跳过、数据页脚),它将不会比Java更有效。我休假了一周,之前无法做出反应-对此表示抱歉。谢谢你的提示。字段的数量各不相同,因此没有预定义行-甚至可能有其他标题值(key=value)。因此,这种方法对我来说并不适用。无论如何,谢谢。我很确定,如果你添加计算这些数字的部分(页眉跳过、页眉限制、数据跳过、数据页脚),它将不会比Java更有效。我休假了一周,之前无法做出反应-对此表示歉意。谢谢你的提示。字段的数量各不相同,因此没有预定义行-甚至可能有其他标题值(key=value)。因此,这种方法对我来说并不适用。不管怎样,谢谢你。我在度假——很抱歉我反应太晚了。你的方法很有见地,似乎是一条可行之路。我最喜欢的是,一个新的流是用一个合适的标题行创建的,如果需要,我可以将所有其他标题信息放在全局映射中!酷。只需要做一些更改(init of string headerData=“ID | START | END |)”,谢谢您的回答。我现在遇到了下一个问题。我可能会找到解决方案(如何将1行变为5行-展平/规范化数据)。再次感谢!也许您应该稍微修改一下代码示例:将“If”更改为“If”,然后“subString”到“subString”。谢谢,MarcoTo将1行分成N行(另一种说法是a.k.a)您也可以使用tJavaFlex,在开始和结束时创建一个循环,并在主循环中为其分配一些值。我正在度假,很抱歉我的反应太晚。您的方法非常有见地,而且似乎是可行的。我最喜欢的是,创建一个具有适当标题行的新流,如果需要,我可以放置所有其他标题行在全局地图中进行初始化!很酷。只需进行一些更改(init of string headerData=“ID | START | END |”谢谢您的回答。我现在遇到了下一个问题。我可能会找到解决方案(如何将1行转换为5行-展平/规范化数据)。再次感谢!也许您应该对代码示例进行一些修改:将“If”更改为“If”,将“subString”更改为“subString”。谢谢,MarcoTo将1行拆分为N行(另一种方式是a.k.a)。您也可以使用tJavaFlex,在开始端创建一个循环,并在主循环中为其分配一些值。
//if you want to handle the header separately:
globalMap.put("headerData",headerData);