Конкретно с 5-го по 6-й:
А вообще хочу сказать, что в обоих случаях (копирование и удаление) хорошо бы разрывы строк проверять. Как вариант - их можно заменить на пробелы предварительно:
Код:
S := StringReplace(Memo1.Text, #13#10, ' ', [rfReplaceAll])