EDI File Joiner

Processing too many separate EDI files? Combine them into one!

EDIFileJoiner provides a fast and easy way to combine multiple X12 EDI files.  It exhibits fast reading and writing speeds and offers the ability to combine EDI files at the Functional Group Level (GS) or the Header Level (ST).


Main Features

  • Ability to combine multiple X12 EDI files into one EDI file
  • Ability to combine multiple X12 EDI strings into one in-memory string
  • Ability to combine X12 files at the functional group level (GS) or the header level (ST)
  • Automatically handles ISA, ST, GS and IEA segment counts and control numbers
  • Fast reading and writing speeds
  • Asynchronous file read and write operations
  • Auto detection of file delimiters to properly combine files
  • Memory efficient
  • Ability to specify the size of read and write buffers for less IO operations
  • Easy to use API


EDIFileJoiner quickly and efficiently combines separate EDI files into one.  Output files can then be archived.  Output files can also be made more readable by the insertion of line breaks.  By allowing custom read and write buffer size EDIFileJoiner decreases IO and increases overall performance.  File joining is performed asynchronously on a pooled thread to increase program responsiveness.

Combining in-memory strings containing EDI data is also supported as of version 7.3 of RDPCrystal EDI Library

The EDIFileJoiner component is included in RDPCrystal EDI Library


EDIFileJoiner joiner = new EDIFileJoiner();
joiner.AutoDetectDelimiters = true;

// Join the files at the ST header level
joiner.FileJoinLevel = FileJoinLevel.HEADER;

// Subscribe to be notified when the joining operation is complete
joiner.OnFileOperationCompleted += new EventHandler(joiner_OnFileOperationCompleted);

// Specify the list of files to join
List files = new List();

// Join the EDI files
joiner.Join(files, "CombinedAll.txt");
private void joiner_OnFileOperationCompleted(object sender, FileOperationCompletedEventArgs e)
   if (e.Status != FileOperationStatus.Success)
     // Success