Разделители

Разделители определяют правила, по которым будут прочитаны данные из файла шагом FlatFileReader и по которым будет произведена запись в файл в результате работы шага FlatFileWriter.

В системе существует два типа разделителей:

  • разделители полей fieldDelimiter и fieldDelimitersExc;
  • разделители записей recordDelimiter.

Разделители назначаются при определении метаданных в теге <Record> и могут быть переопределены в атрибутах шагов.

По умолчанию, разделителем записей является символ перевода строки «\n», а разделителем полей – запятая «,».

Для чтения файла такого вида: qwe|rty|uio;asd|fgh|jkl;zxc|vbn|mko в качестве разделителя полей следует задать вертикальную линию, а в качестве разделителя записей – точку с запятой: <Record fieldDelimiter="|" recordDelimiter=";">.

Если назначить метаданные для записи, установив разделитель полей <Record fieldDelimiter="_">, а разделитель записей не задать, то выходной файл будет выглядеть таким образом:

qwe_rty_uio
asd_fgh_jkl
zxc_vbn_mko

RecordDelimiter при этом будет по умолчанию равен символу переноса строки.

Во FlatFileReader и FlatFileWriter можно переопределять fieldDelimiter и recordDelimiter в атрибутах шага. Тогда, даже если в метаданных в элементе <Record> указаны одни разделители – в шагах для чтения или записи могут быть указаны другие разделители, переопределённые значения будут приоритетными при выполнении алгоритма.

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

Например, нужно прочитать запись "&пример записи&", где в начале и в конце есть символ "&". Создадим отдельный FlatFileReader на каждое возможное значение trimStyle. В атрибутах каждого созданного шага FlatFileReader зададим trimSymbs="&", а trimStyle пропишем как в таблице ниже.

значение trimStyleописаниезначение trimSymbsкак будет прочитана запись
00 (No)не удалять символы&"&пример записи&"
01 (End)удалить символ только в конце поля&"&пример записи"
10 (Start)удалить символ только в начале поля&"пример записи&"
11 (All)удалить символы и в начале поля и в конце&"пример записи"

Крайние символы поля (trimSymbs) – это символ, который может стоять в начале или конце поля. Например, во фразе "~|ох, рано~|;~|встаёт охрана~|" в начале и в конце стоят "~|", если в атрибутах FlatFileWriter указать trimSymb="\~|" , тогда строка при разных стилях отображения будет выглядеть так:

trimStyle="No": "~|ох, рано~|;~|встаёт охрана~|"

trimStyle="End": "~|ох, рано;~|встаёт охрана"

trimStyle="Start": "ох, рано~|;встаёт охрана~|"

trimStyle="All": "ох, рано;встаёт охрана"

По умолчанию trimSymbs=" " равен пробелу или символу табуляции, а trimStyle="All", поэтому при чтении строки с пробелами в начале или конце, они будут удалены, если trimSymbs не переопределён.

Составные разделители

Если в записи несколько разных разделителей (например: John;Whatson,London\16|Baker Street) вы можете указать все дополнительные разделители следующим образом:

Введите все дополнительные разделители в виде списка пар «номер-значение», с указанием места, на котором стоит каждый разделитель. Нумерация ведется с нуля.

В приведенном выше примере будет fieldDelimitersExc="0:;; 2:\; 3:|;", а в качестве разделителя по умолчанию - запятая.

То же самое можно использовать для любого другого разделителя, а также для разделителя записей и/или разделителя не по умолчанию. Например, разделитель записи может быть следующим: \n\|\r\n

Разделитель может являться частью значения поля плоских файлов, если поставить знаки квотирования в начале и конце поля. Например, если есть запись с запятой в качестве разделителя полей, можно обрабатывать следующие поля как одно поле: "John,Smith".

Символ квотирования «"» используется для заключения содержимого полей, содержащего специальные/служебные символы (запятая, перевод строки или двойная кавычка).

Непечатаемые разделители

Если нужно использовать любой непечатаемый разделитель, вы можете записать его как выражение. Например, вы можете ввести следующую последовательность символов в качестве разделителя записей в метаданных: RecordDelimeter=\u0014.

Такие выражения состоят из кода Unicode \uxxxx без кавычек. Обратите внимание, что каждый символ обратной косой черты «\», содержащийся во входных данных, на самом деле будет дублироваться при просмотре. Таким образом, вы увидите «\» в своих метаданных.