Игнорировать первые 3 строки
Чтобы игнорировать первые 3 строки, вы можете просто настроить менеджер соединений с плоскими файлами так, чтобы они игнорировались, как:

Разделить файл и удалить поврежденные строки
1.Настройте диспетчеры соединений
Кроме того, в диспетчере соединений с плоскими файлами перейдите на вкладку «Дополнительно» и удалите все столбцы, кроме одного, и измените его тип данных на DT_STR
, а MaxLength на 4000
.

Добавьте два диспетчера соединений, по одному для каждого файла назначения, где вы должны определить только один столбец с максимальной длиной = 4000:


2.Настроить задачу потока данных
Добавить задачу потока данных и добавить источник плоских файлов внутри.Выберите диспетчер соединений с исходным файлом.
Добавьте условное разбиение со следующими выражениями:
Файл1
FINDSTRING([Column 0],"OPENING",1) > 1 || FINDSTRING([Column 0],"DATE",1) > 1 || TOKENCOUNT([Column 0]," ") == 19
Файл2
FINDSTRING([Column 0],"A/C",1) > 1 || FINDSTRING([Column 0],"FACTOR",1) > 1 || TOKENCOUNT([Column 0]," ") == 10

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

Эксперименты
Результат выполнения показан на следующих снимках экрана:


Обновление 1 - удаление дубликатов
Чтобы удалить дубликаты, вы должны обратиться по следующей ссылке:
Обновление 2 - удаление только дубликатов заголовков + заменаПробелы с помощью Tab
Если вам нужно только удалить дубликаты заголовков, вы можете сделать это в два шага:
- Добавить компонент скрипта после каждого вывода условного разбиения, чтобы пометить нежелательные строки
- Добавление условного разбиения для фильтрации строк на основе выходных данных компонента сценария
Кроме того, поскольку значения столбцов не содержат пробелов, вы можете использовать регулярное выражение для замены пробелов с одной вкладкой насделайте файл согласованным.
Компонент сценария
В компоненте сценария добавьте выходной столбец типа DT_BOOL и назовите его outFlag
, а также добавьте выходной столбец outColumn0
типа DT_STR
и длины, равной 4000
, и выберите Column0
в качестве входного столбца.


Затем напишите следующий скрипт в Редакторе скриптов (C #) :
Сначала убедитесь, что вы добавили пространство имен RegularExpressions
using System.Text.RegularExpressions;
Код сценария
int SEOCount = 0;
int NOMCount = 0;
Regex regex = new Regex("[ ]{2,}", RegexOptions.None);
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Column0.Trim().StartsWith("SEO"))
{
if (SEOCount == 0)
{
SEOCount++;
Row.outFlag = true;
}
else
{
Row.outFlag = false;
}
}
else if (Row.Column0.Trim().StartsWith("NOM"))
{
if (NOMCount == 0)
{
NOMCount++;
Row.outFlag = true;
}
else
{
Row.outFlag = false;
}
}
else if (Row.Column0.Trim().StartsWith("PAGE"))
{
Row.outFlag = false;
}
else
{
Row.outFlag = true;
}
Row.outColumn0 = regex.Replace(Row.Column0.TrimStart(), "\t");
}
Условное разбиение
Добавьте условное разбиение после каждого компонента сценария и используйте следующее выражение для фильтрации дублирующего заголовка:
[outFlag] == True
И подключите условное разбиение кместо назначения. Убедитесь, что сопоставили outColumn0
со столбцом назначения.

Ссылка на пакет