Talend如何将上次修改的文件传递到TFileInputDelimited?

Talend如何将上次修改的文件传递到TFileInputDelimited?,talend,Talend,我到处找了找,读了这篇文章 但它似乎并不完整,也不起作用 情况:我需要从本地计算机上的目录中获取最后修改的文件。然后我需要将该文件传递到fileinputdelimited组件中 我目前有: tfilelist-->迭代-->滴度到流量-->tsamplerow -->tflowtoiterate->tinpufiledelimited-->tlogrow(只是为了确保它拉取的文件正确) 但它不起作用。我已经配置好了。所以滴度toflow有一个列叫做 以“((字符串)globalMap.get

我到处找了找,读了这篇文章

但它似乎并不完整,也不起作用

情况:我需要从本地计算机上的目录中获取最后修改的文件。然后我需要将该文件传递到fileinputdelimited组件中

我目前有:

tfilelist-->迭代-->滴度到流量-->tsamplerow -->tflowtoiterate->tinpufiledelimited-->tlogrow(只是为了确保它拉取的文件正确)

但它不起作用。我已经配置好了。所以滴度toflow有一个列叫做

  • 以“((字符串)globalMap.get(“当前_文件”)”作为值的“文件名”
  • 以((字符串)globalMap.get(“当前文件目录”)作为值的“文件目录”,以及
  • 以((字符串)globalMap.get(“当前文件路径”)作为值的“FileAndDirectory”
tsamplerow仅限于“1”

TIFLOWTOINTERATE设置为

  • “FileNameOnly”是“FileName”的值
  • “FileDirectoryOnly”是“FileDirectory”,并且
  • “FilePathComplete”是“FileAndDirectory”
在tinputfiledelimited的文件位置字段中,我有
“((字符串)globalMap.get(“FilePathComplete”)”

当它运行时,我得到一个错误,说
找不到文件或路径。如果我剪切fileinput组件并将其直接发送到tlogrow,它将显示一行空白条目


有什么想法吗?

我不确定你是否只是对这里的工作有点误解,但它似乎适合我

以下是一些显示我的工作设计的屏幕截图:

通过查看您的帖子,我能想到的唯一一件事是,您可能稍微弄乱了TFlowtoItem中的键值对组合。我倾向于发现那里的默认设置在任何时候都可以正常工作,这也让它的功能更加明显


编辑:实际上,看起来您可能在滴度流中使用了错误的值。tFileList会将文件路径等的值抛出到全局映射中,但会在其前面加上唯一的组件名称。如果在值窗口中点击
ctrl+space
,它将提示您可用值的列表(这些值也在studio的“大纲”选项卡中指定)。它通常会隐式转换为字符串,但为此,您需要显式转换它,因此请使用
.toString()
而不是
(字符串)

我不确定您是否只是对此处的作业有点配置错误,但它对我来说似乎工作正常

以下是一些显示我的工作设计的屏幕截图:

通过查看您的帖子,我能想到的唯一一件事是,您可能稍微弄乱了TFlowtoItem中的键值对组合。我倾向于发现那里的默认设置在任何时候都可以正常工作,这也让它的功能更加明显


编辑:实际上,看起来您可能在滴度流中使用了错误的值。tFileList会将文件路径等的值抛出到全局映射中,但会在其前面加上唯一的组件名称。如果在值窗口中点击
ctrl+space
,它将提示您可用值的列表(这些值也在studio的“大纲”选项卡中指定)。它通常会隐式转换为字符串,但为此,您需要显式转换它,因此使用
.toString()
而不是
(字符串)

获取上次修改的文件的另一种方法如下所示

tFileList(按文件修改日期排序的描述)--->tFixedFlowInput(模式-文件名,文件号)--->tHashOutput

这里是tFixedFlowInput filename=file(String)globalMap.get(“tFileList\u 1\u CURRENT\u FILEPATH”)+“/”+(String)globalMap.get(“tFileList\u 1\u CURRENT\u file”)

filenumber=(整数)globalMap.get(“tFileList\u 1\u NB\u文件”)

上面将完成的是获取目录中所有文件的列表及其编号/等级-上次修改的文件的编号为1,旁边的编号为2…依此类推

现在,在上面tFileList的Subbook上,您可以拥有tHashInput,它将从tHashOutput上面读取,并只过滤filenumber==1的行,这意味着最后修改的文件

tHashInput(指向tHashoutput的链接)--->tFilterRow(文件号==1)--->tLogRow


获取null的一个原因可能是您使用了globalMap.get(“当前文件路径”)而不是globalMap.get(“tFileList\u 1\u当前文件路径”)

获取上次修改文件的另一种方法如下所示

tFileList(按文件修改日期排序的描述)--->tFixedFlowInput(模式-文件名,文件号)--->tHashOutput

这里是tFixedFlowInput filename=file(String)globalMap.get(“tFileList\u 1\u CURRENT\u FILEPATH”)+“/”+(String)globalMap.get(“tFileList\u 1\u CURRENT\u file”)

filenumber=(整数)globalMap.get(“tFileList\u 1\u NB\u文件”)

上面将完成的是获取目录中所有文件的列表及其编号/等级-上次修改的文件的编号为1,旁边的编号为2…依此类推

现在,在上面tFileList的Subbook上,您可以拥有tHashInput,它将从tHashOutput上面读取,并只过滤filenumber==1的行,这意味着最后修改的文件

tHashInput(指向tHashoutput的链接)--->tFilterRow(文件号==1)--->tLogRow


获取null的一个原因可能是您使用了globalMap.get(“当前文件路径”)而不是globalMap.get(“tFileList\u 1\u当前文件路径”)

上述问题的简单解决方案如下:

t文件列表
(按文件修改日期排序ASC)-->
titerateTowlow
-->
tJava
(仅用于结束主题)

<