• Unfortunately, you are using a part of SSIS that, in my opinion, has been implemented poorly (although you could argue that the problem is the OLE DB provider used for CSV files.

    Whilst you have worked around the quote delimiter, you still have a problem with the comma separator between fields because the last field appears to contain commas. When SSIS reads a CSV file, it looks for the comma (field separator) and WHENEVER it finds it, it blindly expects that to indicate that the next field start right there. Now, you might hope to that the field delimiter (in your case |~|) should tell SSIS "Hang on - the any commas you find between the pair of |~| should simply be treated as data in that field.". Well, no, it simply does not do that. Every comma (or whatever character is used as the field separator) gets treated as a field separator.

    If at all possible, try to use a value that is not present in the data (or add logic to your script so that the field separators are changed to something that will work for you.

    And the most disappointing part of CSV files is that MS-Excel will quite happily open the file and will actually do what you are expecting. So why, oh why, can't the Excel developers talk to the SSIS (or OLE DB) folk - they all work for the same company and one of them knows how to open CSV files.