Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 21:46   #1
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию Подскажите в чём ошибка

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
   f:textfile;
   st,s:string; n:integer;
begin
  listbox2.Items.Clear;
  listbox1.Items.Clear;
  try
   n:=combobox1.ItemIndex; //номер выделенной строки
//////////Ф.И.О.////////////////
   listbox2.Items.Add(combobox1.Items.Strings[n]);
//////////Год рождения////////////////
   AssignFile(F,'data\god.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\god.qxt');
   st:='Год рождения: '+listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
/////////// Адрес////////////////
   AssignFile(F,'data\home.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\home.qxt');
   st:='Проживает по адресу: '+listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
/////////// Факультет////////////////
   AssignFile(F,'data\fac.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\fac.qxt');
   st:=listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
///////////Специальность////////////////
   AssignFile(F,'data\spec.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\spec.qxt');
   st:='Специальность: '+listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
///////////Курс////////////////
   AssignFile(F,'data\kurs.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\kurs.qxt');
   st:='Куср: '+listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
///////////Среднее образование////////////////
   AssignFile(F,'data\zaved.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\zaved.qxt');
   st:='Среднее образование получено: '+listbox1.Items.Strings[n];
   Listbox2.Items.Add(st);
   closefile(f);
  except
    showmessage('С данным студентом, что то не так');
  end;
При нажатии на эту кнопку в листбокс2 выводится различные сообщения, всё работает нормально.

после нажатие на кнопку которая успешно добавляет добавляет новые данные в текстовые документы
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
 f: TStrings;
 s: string;
begin
 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\fio.qxt');
  s := edit1.Text +' '+ edit2.Text + ' ' + edit3.Text;
  
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\fio.qxt');
 finally
  f.Free;
 end;


 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\god.qxt');
  s := edit4.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\god.qxt');
 finally
  f.Free;
 end;


 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\home.qxt');
  s := edit5.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\home.qxt');
 finally
  f.Free;
 end;
///////////////////
 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\fac.qxt');
  s := edit6.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\fac.qxt');
 finally
  f.Free;
 end;
//////////////////////
 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\spec.qxt');
  s := edit7.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\spec.qxt');
 finally
  f.Free;
 end;
////////////////////////////
 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\kurs.qxt');
  s := edit8.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\kurs.qxt');
 finally
  f.Free;
 end;
////////////////////////
 f := TStringList.Create;
 try
  f.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'data\zaved.qxt');
  s := edit9.Text;
  f.Add(s);
  f.SaveToFile(ExtractFilePath(ParamStr(0)) + 'data\zaved.qxt');
 finally
  f.Free;
 end;

   form2.Close;
end;
опять нажимаем первую кнопку и вылавзиет следующая ошибка, в чём проблемма?
Изображения
Тип файла: jpg 111.jpg (244.1 Кб, 68 просмотров)
nolz вне форума
Старый 18.12.2009, 00:12   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А вот то что написан в том окошке "ошибки" Вы прочитать видимо не удосужились ? а именно
Цитата:
List index out of bounds (20)
BOBAH13 вне форума
Старый 18.12.2009, 00:53   #3
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Если ты не понял в чем ошибка "Индекс списка вне предела". Т.е. у тебя что-то с параметром n не то.
Всё гениальное - просто!
.Phoenix вне форума
Старый 18.12.2009, 01:24   #4
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Всё я прочитал, и всё понял, посмотрите внимательно на первый код, такой ошибки не должно возникать, я много раз всё перепроверил, с параметром n всё нормально.
nolz вне форума
Старый 18.12.2009, 01:38   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Молодца!
А теперь кидаем бряку на счетчик цикла и проверяем, не выходит ли он за пределы...
И убеждаемся - выходит...
Кстати, это уже упомянутое "N".

Последний раз редактировалось mihali4; 18.12.2009 в 01:40.
mihali4 вне форума
Старый 19.12.2009, 12:10   #6
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Но каким образом, оно может выходить если N это номер выделенной строки, и нигде не изменяется
nolz вне форума
Старый 19.12.2009, 15:56   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Сообщение от nolz Посмотреть сообщение
Но каким образом, оно может выходить если N это номер выделенной строки, и нигде не изменяется
После запуска программы если программно или вручную не установить номер выбранного элемента (выбрать что-нибудь в списке) в твоем combobox1, то он будет равен -1 и соответственно при выполнении кода
Код:
st:='Год рождения: '+listbox1.Items.Strings[n];
Делфи заткнется именно на такой ошибке, т.к. в Strings элемента под номером -1 не может быть.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума
Старый 19.12.2009, 17:22   #8
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

у меня N програмно вводится
Код:
n:=combobox1.ItemIndex;
Если бы проблемы была в этом то ошибка вылазила сразу же, а она выходит только после добавление нового элемента
Я сколько просматривал, так и не смог заметить почему что то случается с N
nolz вне форума
Старый 19.12.2009, 17:52   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Код:
  listbox2.Items.Clear;
  listbox1.Items.Clear;
  try
   n:=combobox1.ItemIndex; //номер выделенной строки
//////////Ф.И.О.////////////////
   listbox2.Items.Add(combobox1.Items.Strings[n]);
//////////Год рождения////////////////
   AssignFile(F,'data\god.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\god.qxt');
   st:='Год рождения: '+listbox1.Items.Strings[n];
обращение к пустому списку
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 19.12.2009, 18:00   #10
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

он не пустой
Код:
listbox2.Items.Clear;
  listbox1.Items.Clear;
  try
   n:=combobox1.ItemIndex; //номер выделенной строки
//////////Ф.И.О.////////////////
   listbox2.Items.Add(combobox1.Items.Strings[n]);
//////////Год рождения////////////////
   AssignFile(F,'data\god.qxt');
   reset(f,s);
   listbox1.Items.LoadFromFile('data\god.qxt');
   st:='Год рождения: '+listbox1.Items.Strings[n];
nolz вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, в чём ошибка? nec117 Общие вопросы C/C++ 5 04.12.2009 20:21
Подскажите в чём дело? GMSD PHP 0 14.08.2009 14:04
Подскажите в чём причина :( Cannibal Компьютерное железо 3 16.02.2009 23:27
Подскажите в чём ошибка! Irat Паскаль, Turbo Pascal, PascalABC.NET 3 18.02.2008 17:13