Решил дополнять класс TStringList разными фичами для удобства. Выкладываю начальный вариант. Просьба отписаться о нужности оного, и, может быть, предложения для добавления новых свойств и методов.
Описание уже добавленных:
  property  CombinedLine[by: string]: string read GetCombinedLine write SetCombinedLine;
Возвращает строку собранную из списка с разделителями by. Разделители ставятся и в начало, и в конец строки. При нулевом размере списка возвращает by. При записи добавляет к имеющемуся списку список собранный из строки разбитой с помощью by.
  property  EndIndex: integer read GetEndIndex write SetEndIndex;
Возвращает номер последнего индекса в списке. Устанавливает (с обрезанием или донаращиванием из DefString списка) размер списка по последнему индексу.
  property  Count: integer read GetCount write SetCount; 
Возвращает размер списка. Устанавливает размер по типу как с EndIndex.
property  DefString: string read FDefString write FDefString;
Строка, добавляемая по умолчанию, при изменении размера списка.
procedure Invert;
Инвертирует список.
  procedure ChangeEncoding(EC: TEncoding);
TEncoding = (eDOS866, eWin1251, eUTF8);
Собственно перекодирует в нужную кодировку весь список. По умолчанию установлена кодировка UTF8, т.е. eUTF8.
procedure DeleteFromTo(InxFrom, InxTo: integer);
Удаляет строки начиная с индекса InxFrom до InxTo включительно.
procedure GetEvenList(EL: TStrings);
Помещает в EL строки с четным индексом.
procedure GetOddList(EL: TStrings);
Помещает в EL строки с нечетным индексом.
procedure DeleteEvenList;
Удаляет из списка все строки с четным индексом.
procedure DeleteOddList;
Удаляет из списка все строки с нечетным индексом.
procedure ClearsSub(const Sub: string = ' '; Method: TClearSub = csAround);
TClearSub = (csAround, csAll, csBegin, csEnd);
очищает все строки списка от подстрок Sub методом Method. csAround - вначале и вконце; csAll - все, которые встретятся; csBegin - вначале; csEnd - вконце.
Бонус:
В модуле StringsMake есть ряд процедур и функций по работе со строками и списками.
  function FromPos(const P, Str: String; const FP: Word): SizeInt; //ищет подстроку, начиная с FP номера
  procedure AddStrIfNot(var S: string; Added: string);  //Добавляет строку Added к S, если ее нет в конце
  procedure ClearSub(var S: string; const Sub: string = ' '; Method: TClearSub = csAround); //удаляет все Sub из строки
  procedure ClearSub(S: TStrings; const Sub: string = ' '; Method: TClearSub = csAround);   //тоже из списка
  procedure ClearFromChar(var S: string; const Ch: string);  //удаляет все символы начиная с первого найденного Ch
  function  TStringsToStr(TS: TStrings; By: string = ''): string; //возвращает строку, собранную из списка TS с разделителями By
  function  FwPStrToDoubleDef(var S: string; Def: Double): Double;
  function  DoubleToFwPStr(D: Double): string;
  function RandomEngStr(CountCh: Word): String;  //Формирует строку в размере CountCh из случайных символов латиницы
  //Перекодировки
  procedure Windows1251ToUTF8(var Str: string);
  procedure UTF8ToWindows1251(var Str: string);
  procedure OEM866ToUTF8(var Str: string);
  procedure UTF8ToOEM866(var Str: string);
  procedure OEM866ToWindows1251(var Str: string);
  procedure Windows1251ToOEM866(var Str: string);
  procedure DOS8662UTF8Strings(var S: TStrings);
  procedure UTF82DOS866Strings(var S: TStrings);
			
				


 
 
