我认为这很简单,但是有些失败了。
我有这个:
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 result
与Get 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我的语法很糟糕,所以堆纸机可以编辑此问题。
答案 0 :(得分:1)
答案 1 :(得分:0)
好吧,经过几天的研究,仍然无法在正则表达式中使用这种路径。
但是我得到了另一个替代答案。它需要比预期更多的步骤。因此,就在这里(你们可以参考):
Table Input
步骤,从数据库中获取您要在路径上使用的所有文件夹名称。如果您没有,请做一个。使用Formula
步骤。将Table Input
与Formula
连接并生成值。
例如:
字段名称:[fill yourself]
值:"ftp://user:password@host/Folder/" & [folder from db]
。
您可以根据需要将"ftp://user:password@host/[your folder]/[again]/.."
与& [table value] "/" & [any value] "/" ...
结合使用
您还可以使用Calculator
步骤来生成正则表达式值。
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,然后在“过滤器”选项卡中,获取[仅文件夹],这将列出该文件夹中的所有文件夹。起点,您可以从此处使用“筛选步骤”来验证要使用的步骤。