Apache Commons VFS - Как открыть любой каталог, следующий за конкретным каталогом? - PullRequest
0 голосов
/ 29 октября 2018

Я думаю, что это простая вещь, но кое-как я терплю неудачу с этим.

У меня есть это:

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 при предыдущем преобразовании, и да, это преобразование на уровне задания.

Я использую путь для доступа к файлу в Pentaho Data Integration aka Kettle, используя Text File Input Step.

Я имею в виду установить /../ в значение переменной, но в переменной есть хотя бы одно значение и два максимальныхтак что я не могу, потому что у меня есть 30+ значений.

Я пытаюсь использовать Copy row to result с Get row from result и делать 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 голосов
/ 06 ноября 2018

Ну, после нескольких дней работы над этим, и все еще не удается использовать этот тип пути с регулярным выражением.

Но у меня есть другой альтернативный ответ для этого. Требуется больше шага, чем предполагалось. Итак, вот оно (вы, ребята, можете использовать это для справки):

  1. Используйте Table Input step и возьмите все имена папок из вашей базы данных, которые вы хотите использовать в пути. Если у вас его нет, сделайте его.
  2. Используйте 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 step.

  3. Используйте Get File Name step или Text File Input step. Подключите Formula к этому. Дважды щелкните этот шаг, установите флажок Accept filename from a field. Выберите [path] поле, которое вы создали ранее, а также выберите [regex] поле, которое вы создаете.

Ну, тогда все готово, вы можете сделать что-нибудь после третьего шага. Это единственный альтернативный способ, я действительно ценю, если кто-то может научить меня, как это сделать, только используя path и regex.

P.S Мои извинения за грамматику. Все еще учусь.

0 голосов
/ 07 ноября 2018

Я не думаю, что шаг Получить имена файлов может выполнять несколько поисков в одной строке так, как вы хотите, вы можете вывести список всех папок из одной точки вперед.

ftp: // пользователь: пароль @ хост / папка ..., чтобы вывести список всех подпапок с этого момента, назначить подпапки «Включить», с. * RegExp и на вкладке «Фильтры» получить [ Только папки], здесь будут перечислены все папки с начальной точки, здесь вы можете использовать шаги фильтра для проверки того, какую из них использовать.

enter image description here

0 голосов
/ 29 октября 2018

Если замена /../ на /\.\./ не работает, вы можете попробовать что-то вроде: enter image description here

...