Example: Splitting a text file with a regular expression delimiter and including the delimiter in the messages
Transfer a single text file to multiple messages by splitting the file at each match of a given Java regular expression and include the regular expression match in the resulting messages. To do this we use the -dqdt and -qi parameters of the fteCreateTransfer command.
Transfer a single text file to multiple messages on a queue. The file is split into
variable-length sections, each of which is written to an individual message. The text file is split
at each point where the text in the file matches a given regular expression. The source file is
called /tmp/customers.text and has the following contents:
Customer name: John Smith Customer contact details: john@example.net Customer number: 314 Customer name: Jane Brown Customer contact details: jane@example.com Customer number: 42 Customer name: James Jones Customer contact details: jjones@example.net Customer number: 26The regular expression that specifies where to split the file is Customer\snumber:\s\d+, which matches the text
Customer number:followed by any number of digits. Regular expressions specified at the command line must be enclosed in double quotation marks to prevent the command shell evaluating the regular expression. The regular expression is evaluated as a Java regular expression. For more information, see Regular expressions used by MFT.
By default the number of characters that a regular expression can match is set to five. The regular expression used in this example matches strings that are longer than five characters. To enable matches that are longer than five characters edit the agent properties file to include the property maxDelimiterMatchLength.
By default, the text that matches the regular expression is not included in the messages. To include the text that matches the regular expression in the messages, as in this example, use the -qi parameter. The source file is located on the same system as the source agent AGENT_NEPTUNE, which connects to the queue manager QM_NEPTUNE. The destination queue, RECEIVING_QUEUE, is located on the queue manager QM_MERCURY. QM_MERCURY is also the queue manager used by the destination agent AGENT_MERCURY. The transfer splits the source file into sections and writes each of these sections to a message on RECEIVING_QUEUE.
Procedure
- Stop the destination agent using the following command:
fteStopAgent AGENT_MERCURY
- Add the following line to the agent properties file for
AGENT_MERCURY:
maxDelimiterMatchLength=25
Note: Increasing the value of maxDelimiterMatchLength can decrease performance. - Start the destination agent using the following command:
fteStartAgent AGENT_MERCURY
- Type the following command:
fteCreateTransfer -sa AGENT_NEPTUNE -sm QM_NEPTUNE -da AGENT_MERCURY -dm QM_MERCURY -dq RECEIVING_QUEUE text -dqdt "Customer\snumber:\s\d+" -qi -dqdp postfix /tmp/customers.text
The source agent, AGENT_NEPTUNE, reads the data from the file /tmp/customers.text and transfers this data to the destination agent, AGENT_MERCURY. The destination agent, AGENT_MERCURY, writes the data to three persistent messages on the queue RECEIVING_QUEUE. These messages all have the same IBM MQ group ID and the last message in the group has the IBM MQ LAST_MSG_IN_GROUP flag set. The data in the messages is as follows.- First message:
Customer name: John Smith Customer contact details: john@example.net Customer number: 314
- Second message:
Customer name: Jane Brown Customer contact details: jane@example.com Customer number: 42
- Third message:
Customer name: James Jones Customer contact details: jjones@example.net Customer number: 26
- First message: