Bekanntlich fehlt in den ganz alten Delphi-Versionen die Property StrictDelimited. Diese trägt beim Zuweisen von .DelimitedText dafür Sorge, dass nicht jedes Leerzeichen ebenfalls als Delimiter betrachtet wird. Durch einen kleinen Trick erreicht man aber dies aber auch z.B. in einem Delphi 7, indem man das Leerzeichen vorher durch ein Zeichen ersetzt, was in einer CSV-Datei nicht vorkommen darf.
var tsl: TStringList; oneLine: String; begin tsl := TStringList.Create; oneLine := '1;2 3;5;Achtzehn Uhr'; try tsl.Delimiter := ';'; // Replace all ' ' by a '#' before assigning it to .DelimitedText tsl.DelimitedText := StringReplace(oneLine, ' ', '#', [rfReplaceAll]); // Replace it back in the .Text property tsl.Text := StringReplace(tsl.Text, '#', ' ', [rfReplaceAll]); // ... now all columns are strictly delimited by ; // ... tsl[0] = '1', tsl[1]='2 3', tsl[2]='5', tsl[3]='Achtzehn Uhr'