Загрузка файлов за последние 7 дней с конкретными именами в SSIS - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть папка, которая ежедневно получает дамп из 7 или 8 файлов .xls.Из всех этих файлов мне просто нужно загрузить 2 файла с определенным именем .. ABC_datestamp.xls и XYZ_datestamp.xls.

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

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

В любом случае, я могу использовать задачу скрипта для генерации имен файлов, таких как ABC_02-Dec-2011.xls, ABC_01-Dec-2011.xls, ABC_30-Nov-2011.xls .......последние 7 дней файлы и передать его как переменную ЗАДАЧЕ ПОТОКА ДАННЫХ?

Какие-нибудь лучшие предложения?

Я знаю, что многие задавали подобные вопросы, но я новичок в SSISи не в состоянии найти хорошие ответы.

Большое спасибо ..

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

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

Поток управления будетвыглядеть следующим образом: screenshot of foreach loop container

с переменными отображениями FELC_InputFolderContents, установленными таким образом: screenshot of foreach loop container settings

SCR_SetProcessFileFlag конфигурация: screenshot of script task settings

*Сценарий 1014 * выглядит так:

    public void Main()
    {
        string targetFileFullPath = (string)Dts.Variables["User::TargetFileFullPath"].Value;
        string targetFileName = Path.GetFileName(targetFileFullPath);
        Dts.Variables["ProcessFileFlag"].Value = IsValidFileName(targetFileName);
        Dts.TaskResult = (int)ScriptResults.Success;
    }

    private bool IsValidFileName(string targetFileName)
    {
        bool result = false;
        if (Path.GetExtension(targetFileName) == "xls")
        {
            string fileNameOnly = Path.GetFileNameWithoutExtension(targetFileName);
            if (fileNameOnly.Substring(0, 4) == "ABC_" || fileNameOnly.Substring(0, 4) == "XYZ_")
            {
                string datePart = fileNameOnly.Substring(4);
                DateTime dateRangeStart = DateTime.Today.AddDays(-7);
                DateTime dateRangeEnd = DateTime.Today;
                DateTime fileDate;
                if (DateTime.TryParse(datePart, out fileDate)) 
                {
                    if (dateRangeStart <= fileDate && fileDate <= dateRangeEnd)
                    {
                        result = true;
                    }
                }
            }
        }
        return result;
    }

и ограничение приоритета между SCR_SetProcessFileFlag и DTT_ProcessSelectedFile сконфигурировано таким образом: screenshot of precedence constraint settings

(Очевидно, конкретная логика для IsValidFileName зависит от ваших конкретных требований.)

0 голосов
/ 02 декабря 2011

Пример в следующей ссылке объясняет, как перебирать файлы в папке и архивировать файлы, которые соответствуют заданному месяцу. В этом примере файлы называются myfile 20-08-2011, myfile 13-09-2011, в зависимости от значения месяца, затем эти файлы перемещаются в папку архива с именами месяцев, такими как August, September и т. Д.

Пример просто архивирует файлы. Если вы хотите загрузить данные, вам нужно разместить задачу потока данных. внутри контейнера цикла Foreach.

Если вы ознакомитесь с примером, у вас появится идея решить вашу проблему.

Как создать пакет, который будет копировать все файлы из данной папки в новую папку?

Вот пример, который показывает, как перебрать папку и загрузить данные файлов Excel в базу данных.

Как импортировать файлы Excel с разными именами и одной и той же схемой в базу данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...