Search code examples
c#parsingflat-file

C# Text File Input Multi-File Output


I have a file that looks something like this:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |

I need to break the file up into multiple files based on the first 6 characters starting in position 2.

File 1 named 29923c.asc:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |

File 2 named 47422K.asc:

|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |

File 3 named 9875D.asc:

|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |

I don't know what will be in the file before the program gets it, just the format. The 6 digits will change depending on the customer. I don't know what they will be.

The only thing I know is the format.

Can anyone give me a suggestion as to how to dynamically obtain\maintain this information so that I can parse it out into individual files?


Solution

  • Read line by line. Get code from each line and create file, put reference to opened file stream to dictionary with code as a key. On each next line check dictionary for the key and use opened stream or create new one. After reading all file close all streams.

    This algorithm will prevent from using too much memory for a file lines if it has a big size.

    For parsing each line you can simply use RegEx, for example.