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

Я использую путь для доступа к файлу в Pentaho Data Integration, также известном как 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.* (сбой)

Итак, любое другое предложение?

N.B. У меня довольно плохая грамматика, поэтому стекеры разрешают редактировать этот вопрос.


person Rio Odestila    schedule 29.10.2018    source источник
comment
Вы уверены, что каталог, к которому вы хотите получить доступ, не защищен?   -  person AlainD    schedule 29.10.2018
comment
Имя файла является регулярным выражением. Попробуйте /\.\./ вместо /../ .   -  person AlainD    schedule 29.10.2018
comment
@AlainD Да, я уверен. Каким-то образом /../ часть означает «Вернуться к предыдущей папке».   -  person Rio Odestila    schedule 30.10.2018


Ответы (3)


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

person AlainD    schedule 29.10.2018
comment
Ну, это не так. Я, вероятно, не могу использовать это решение. Я добавлю и объясню больше в своем вопросе. - person Rio Odestila; 30.10.2018

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

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

введите здесь описание изображения

person Cristian Curti    schedule 07.11.2018

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

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

  1. Используйте шаг Table Input и возьмите все имена папок из вашей базы данных, которые вы хотите использовать в пути. Если у вас его нет, сделайте его.
  2. Используйте Formula шаг. Соедините Table Input с Formula и сгенерируйте значение.

    e.g :

    имя поля: [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-го шага. Это только альтернативный способ, я очень признателен, если кто-то может научить меня, как это сделать, только используя путь и регулярное выражение.

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

person Rio Odestila    schedule 06.11.2018