Видеорегистраторы из Китая можно купить здесь

Когда-то в школе изучали мы предмет "Алгоритмы и структуры данных". Во времена, когда под словом "графический интерфейс" подразумевались менюшки в стиле TurboVision, а каждую программу надо было начинать с насущной проблемы "куда и как ввести исходные данные" и уж только потом размышлять над хитростями и красотами алгоритма - типовые структуры данных вроде стека, очереди, списка, двусвязного списка являлись божественным откровением, до которого допереть своей фантазией было практически нереально.

 Сейчас, когда поддержка типовых структур данных, да еще с дополнительными наворотами, встроена прямо в стандартную библиотеку языка программирования, а в соседней библиотеке есть все для работы с СУБД - кажется, что задумываться больше не о чем. Тем не менее это не так.  

Если вы еще не прониклись идеей-Дзен, о том, что структуры данных, которыми оперирует программа, должны по возможности повторять структуры, применяемые в предметной области, пока это не противоречит достижению должного быстродействия и удобству работы пользователя, рассмотрим простенькие применения TStringList.

Ну с созданием, чтением и записью все более чем тривиально:

Var Config:TStringList;

Config:=TStringList.Create;
Config.LoadFromFile('config.cfg') ;
Config.SaveToFile('config.cfg') ;

С обработкой чуть интереснее: строки можно добавлять в конец по одной (Add), по нескольку (AddStrings), вставлять в нужную позицию (Insert). Если обработка не подразумевает стирания строк - по списку можно пробежаться от начала до конца:

If Config.Count>0 Then
  For I:=0 To Config.Count-1 Do Begin
    Config[I]:=Config[I]+'.';
  End;

 Первая строчка требуется, чтобы не вылететь за границы массива при обращении к первому же (нулевому) элементу, если список внезапно оказался пуст.

 Если вы намереваетесь удалять строки - сканировать массив лучше от конца к началу

If Config.Count>0 Then
  For I:=Config.Count-1 Downto 0 Do Begin
    If (...) Then Config.Delete(I);
  End;

 Опять же для того, чтобы не вылететь за границы массива, только теперь при обращении к последним элементам. Дело в том, что границы цикла For будут определяются единожды - перед его началом, а в тот момент, когда Config.Count содержит изначальную длину списка. При удалении элементов список укорачивается, но цикл об этом не знает, поскольку не опрашивает Config.Count.

 Для того, чтобы что-то в списке найти - необязательно просматривать все строки в цикле - можно спросить

I:=Config.IndexOf('что-то');

Как обычно для "0-based indexes" - т.е. нумераций, начинающихся с нуля (А это все List'ы, Items'ы и многое другое) - значение индекса "-1" означает отсутствие.

If I<0 then не_нашли;

Стандартные Паскалевские строки, с которыми работают функции Pos, Copy и.т.д., являются "1-based" - там отсутствию соответствует значение индекса "0".