Apache Commons VFS-如何打开后跟特定目录的目录?

时间:2018-10-29 02:10:05

标签: kettle pentaho-data-integration file-access pdi apache-commons-vfs

我认为这很简单,但是有些失败了。

我有这个:

ftp://user:password@host/Folder/Folder/Folder/../${Year}/${Month}/*.csv

我正在尝试打开任何文件夹名称,后跟特定的文件夹名称。我尝试使用类似的路径访问文件,但失败。失败是在这部分/../中。

/../,此部分应表示任何文件夹,但无论如何该路径都将返回到先前的文件夹。需要打开3个文件夹并有一个修复名称,所以我无法更改它。

例如,当我使用此ftp://user:password@host/Folder/Folder/Folder/../${Year}/${Month}/*.csv路径时,它将打开类似ftp://user:password@host/Folder/Folder/${Year}/${Month}/*.csv的文件夹。它返回1个文件夹,然后依次是变量和文件。

我使用此/../是因为打开3个文件夹后,我应该检查大约30个以上的文件夹,然后检查两个文件夹(如${Year}/${Month}和3种类型的正则表达式文件(如A*.csv B*.csv C*.csv)。

${Year}/${Month}此变量用作路径,我从Set Variable步骤开始进行上一个转换,是工作级转换。

我使用Text File Input步骤使用该路径访问Pentaho Data Integration ake水壶上的文件。

我正在考虑将/../设置为变量值,但是变量中至少有一个值和两个最大值,所以我不能,因为我有30多个值。

我尝试将Copy row to resultGet row from result一起使用,并在Transformation上执行Execute every input row,但是结果总是失败,每次执行时总是第一行,与字段第一行的值相同(字段包含30+个我需要的文件夹名称),它不会移动到具有不同值的下一行。

我已使用此正则表达式ftp://user:password@host/Folder/Folder/Folder/尝试了此路径[^\/]+\/${Year}\/${Month}\/A.*(失败)

此正则表达式ftp://user:password@host/Folder/Folder/Folder/[^\/]+\/${Year}\/${Month}\/的路径A.*(失败)

还有其他建议吗?

NB我的语法很糟糕,所以堆纸机可以编辑此问题。

3 个答案:

答案 0 :(得分:1)

如果将/../替换为/\.\./不起作用,则可以尝试以下操作: enter image description here

答案 1 :(得分:0)

好吧,经过几天的研究,仍然无法在正则表达式中使用这种路径。

但是我得到了另一个替代答案。它需要比预期更多的步骤。因此,就在这里(你们可以参考):

  1. 使用Table Input步骤,从数据库中获取您要在路径上使用的所有文件夹名称。如果您没有,请做一个。
  2. 使用Formula步骤。将Table InputFormula连接并生成值。

    例如:

    字段名称:[fill yourself]

    值:"ftp://user:password@host/Folder/" & [folder from db]

    您可以根据需要将"ftp://user:password@host/[your folder]/[again]/.."& [table value] "/" & [any value] "/" ...结合使用

    您还可以使用Calculator步骤来生成正则表达式值。

  3. 使用Get File Name步骤或Text File Input步骤。将Formula连接到此。双击此步骤,选中复选框Accept filename from a field。选择您之前创建的[path]字段,然后选择您创建的[regex]字段。

那么就完成了,您可以在第3步之后执行任何操作。这只是另一种方法,如果有人可以教我如何仅使用path和regex来做到这一点,我将不胜感激。

P.S我为语法道歉。还在学习。

答案 2 :(得分:0)

我认为“获取文件名”步骤不能像您想要的那样在一行中进行多次搜索,您可以选择从单点开始列出所有文件夹。

ftp://user:password@host/Folder ...要列出此后的所有子文件夹,请为包含子文件夹分配一个。* RegExp,然后在“过滤器”选项卡中,获取[仅文件夹],这将列出该文件夹中的所有文件夹。起点,您可以从此处使用“筛选步骤”来验证要使用的步骤。

enter image description here