Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка "Index limit out of bounds" в Delphi при работе с `TStringList`

Delphi , Синтаксис , Текст и Строки

Ошибка "Index limit out of bounds" в Delphi при работе с TStringList

При работе с объектами TStringList в Delphi, разработчики могут столкнуться с различными проблемами, одной из которых является ошибка "Index limit out of bounds". Это происходит, когда индекс, используемый для доступа к элементам строки, выходит за пределы допустимых значений. В данной статье мы рассмотрим пример кода, который приводит к такой ошибке, и предложим исправленный вариант.

Пример кода, вызывающего ошибку

Вот пример кода, который приводит к ошибке "Index limit out of bounds":

var
  sl, new : TStringList;
  lscount, index : Integer;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('C:\Folder\test.txt');

    new := TStringList.Create;

    lscount := sl.Count; // Здесь ошибка, так как мы не учитываем, что индексация начинается с 0, а не с 1

    for index := 0 to lscount do // Цикл должен идти до lscount-1
    begin
      sl.Delimiter := '|';
      sl.StrictDelimiter := True;

      sl.DelimitedText := sl.Strings[index]; // Здесь происходит попытка модификации списка во время его обхода

      if sl.Strings[1] = '3M' then // Доступ к элементам с использованием 1-базной индексации
        new.Add(sl.Strings[1] + sl.Strings[3] + sl.Strings[6]); // Ошибка, так как TStringList использует 0-базную индексацию
    end;

    new.SaveToFile('C:\Folder\new.txt');
  finally
    sl.Free;
    new.Free;
  end;
end;

Исправленный вариант

Давайте разберемся, что именно нужно исправить в коде:

  1. Цикл должен идти до lscount - 1, так как счет начинается с нуля.
  2. Необходимо создавать отдельный экземпляр TStringList для разбора каждой строки.
  3. Использовать 0-базную индексацию, так как это стандарт для TStringList.

Исправленный код будет выглядеть следующим образом:

var
  sl, parse, new : TStringList;
  index : Integer;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('C:\Folder\test.txt');

    new := TStringList.Create;
    try
      parse := TStringList.Create;
      try
        parse.Delimiter := '|';
        parse.StrictDelimiter := True;

        for index := 0 to sl.Count - 1 do
        begin
          parse.DelimitedText := sl.Strings[index];

          if (parse.Count > 5) and (parse.Strings[0] = '3M') then // Учитываем 0-базную индексацию
            new.Add(parse.Strings[0] + ' ' + parse.Strings[2] + ' ' + parse.Strings[5]); // Исправляем индексы
        end;
      finally
        parse.Free;
      end;

    finally
      new.SaveToFile('C:\Folder\new.txt');
      new.Free;
    end;
  finally
    sl.Free;
  end;
end;

Заключение

В данной статье мы рассмотрели типичную ошибку, с которой сталкиваются разработчики при работе с TStringList в Delphi, и предложили исправленный вариант кода. Важно помнить о том, что индексация в TStringList начинается с нуля и избегать модификации объекта во время его обхода. Следуя этим простым правилам, можно избежать многих ошибок при работе с коллекциями строк в Delphi.

Создано по материалам из источника по ссылке.

В контексте обсуждается проблема 'Index limit out of bounds' при работе с компонентом `TStringList` в Delphi, включая примеры кода, вызывающего ошибку, и исправленного варианта, с соблюдением правил индексации и избеганием модификации


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 09:01:43/0.0017411708831787/0