Переименование источника файла - PullRequest
4 голосов
/ 09 мая 2019

Я разрабатывал пакет служб SSIS из простого файла.Файл приходит ежедневно, а имя файла имеет указание даты и времени, например:

Filename_20190509042908.txt

Мне было интересно, как я могу пройти до даты части;Я хочу, чтобы пакет динамически считывал файл, но он должен проходить без последних 6 цифр. Мне просто не нужны последние 6-значные числа, поскольку он не является согласованным.

Я хочу передать Filename_20190509.txt

Я выяснил, как получить имя файла до даты, удалив часть времени.Поэтому у меня проблемы с тем, чтобы пакет динамически считывал имя файла, игнорируя последние 6 цифр перед расширением файла.

Может кто-нибудь помочь мне с этим, пожалуйста?

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Удалить часть времени из полного пути к файлу

Предполагается, что полный путь к файлу хранится в переменной с именем @[User::FilePath]

Необходимо добавить переменную типа string (пример: @[User::Filename]), перед задачей потока данных добавить Expression Task и использовать следующее выражение:

@[User::Filename] = SUBSTRING(@[User::FilePath], 1, LEN(@[User::FilePath]) - 
FINDSTRING(REVERSE(@[User::FilePath]), "\\", 1)) + "\\" + 
LEFT(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\")),
LEN(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\"))) - 10) + ".txt"

Пример:

Если значение @[User::FilePath] равно

C: \ Новая папка \ 1 \ Filename_20190503001221.txt

Тогда @[User::Filename] будет:

C: \ Новая папка \ 1 \ Filename_20190503.txt


Если у вас есть только имя файла как

filename_20190503001221.txt

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

@[User::Filename] = @[User::Folderpath] + "\\" + 
LEFT(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\")),
LEN(TOKEN(@[User::FilePath],"\\",TOKENCOUNT(@[User::FilePath],"\\"))) - 10) + ".txt"

Чтение источника файла из переменной

Щелкните диспетчер соединений с плоскими файлами, используемый для чтения исходного файла, нажмите F4 , чтобы отобразить вкладку свойств, щелкните свойство выражения и назначьте следующее выражение свойству connectionstring:

@[User::Filename]

Теперь измените значение свойства Task Flow Delay validation на True.

0 голосов
/ 09 мая 2019

Я должен предположить, что вы используете цикл foreach уже при изменении имени файла, но вот как изменить полное имя на то, что вы хотите:

TOKEN(character_expression, delimiter_string, occurrence)

Ваше использование:

это даст вам полное имя файла:

exp = TOKEN(@filename,"\",LEN(@filename)-LEN(replace(@filename,"\",""))

, затем вам нужно использовать left плюс add .txt

left(exp,LEN(exp)-10) + ".txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...