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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2009, 22:38   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию Не хочет проходится FOR'ом по txt файлу

Переменные:

Процедурная:
Код:
  edf     :   integer;
  p1,p2   :   integer;
  stringelite:string;
  EliteDirF:  TStrings;
  lblelite:   array[1..20] of TLabel;
iEliteDirsS,iEliteDirsE:integer;
EliteDirsS,EliteDirsE:array [1..20] of string;
Код:
Код:
 elitedirF:=TStringList.Create;
 elitedirF.LoadFromFile('EliteDirs.txt');

 iEliteDirsS:=1;
 iEliteDirsE:=1;

 for edf:=0 to EliteDirF.Count-1 do
  begin
    stringelite:=EliteDirF.Strings[i];

    lblelite[i]:=TLabel.Create(GroupBox3);
    lblelite[i].Parent:=GroupBox3;
    lblelite[i].Left:=10;
    lblelite[i].Top:=30;
    lblelite[i].Visible:=true;
    p1:=pos(';',EliteDirF.Strings[i]);
    EliteDirsS[i]:=copy(stringelite,0,p1);
    EliteDirsE[i]:=copy(stringelite,p1,length(stringelite));
    lblelite[i].Caption:=EliteDirsS[i];

    iEliteDirsS:=iEliteDirsS+1;
    iEliteDirsE:=iEliteDirsE+1;
  end;
Нужно чтобы возможно было описывать в глобальном объявлении переменных
НО, не так все просто! Если удалить переменную из объявлений переменных процедуры(форм.крейт) и сунуть ее в объявления глобальных переменных(т.е. объяв. переменных до всех процедур/функций) то программа будет выдавать ошибку при запуске!

Ошибка -> Access violation at address 00000022. Read of address 00000022.

Последний раз редактировалось zotox; 03.08.2009 в 18:43.
zotox вне форума Ответить с цитированием
Старый 03.08.2009, 00:07   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
for edf:=0 to EliteDirF.Count-1 do
цикл по какой переменной? по edf
так какого Вы используете i в цикле?
попробуйте так:
Код:
for i:=0 to EliteDirF.Count-1 do
и ещё, не видно описания массивов
EliteDirsE и EliteDirsS
ну, думаю, что там, так же как и lblelite не меньше 5...

Последний раз редактировалось Serge_Bliznykov; 03.08.2009 в 00:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 00:28   #3
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
for edf:=0 to EliteDirF.Count-1 do
цикл по какой переменной? по edf
так какого Вы используете i в цикле?
попробуйте так:
Код:
for i:=0 to EliteDirF.Count-1 do
и ещё, не видно описания массивов
EliteDirsE и EliteDirsS
ну, думаю, что там, так же как и lblelite не меньше 5...
Да блин точно забыл поменять i на edf

Код:
var
EliteDirsS,EliteDirsE:array [1..20] of string;
Есть ошибка но другая... Описание:
При запуске проги лезет
Access violation at address 00000022. Read of address 00000022.

Указывая на конец цикла синей подсветкой
zotox вне форума Ответить с цитированием
Старый 03.08.2009, 01:00   #4
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

Цитата:
iEliteDirsS:=iEliteDirsS+1;
iEliteDirsE:=iEliteDirsE+1;
а как это так? прибавить к массиву единицу??
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 03.08.2009, 01:01   #5
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

zotox, как мне кажется в EliteDirF и в массивах lblelite, EliteDirsS, EliteDirs не одинаковое количество элементов. То есть вы обращайтесь за границы массива, в массивах максимальное количество элементов 20, а цикл пытается работать, например с 22-м элементом которого не существует.
Crivel вне форума Ответить с цитированием
Старый 03.08.2009, 02:27   #6
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от TAVulator Посмотреть сообщение
а как это так? прибавить к массиву единицу??
Так да... Не дописал кое что в переменных для форума
iEliteDirsS и iEliteDirsE это тип инт

Цитата:
zotox, как мне кажется в EliteDirF и в массивах lblelite, EliteDirsS, EliteDirs не одинаковое количество элементов. То есть вы обращайтесь за границы массива, в массивах максимальное количество элементов 20, а цикл пытается работать, например с 22-м элементом которого не существует.
Нет. Кое что случайно удалил при изменении текста. Добавил. (у меня 5 строчек в файле)
zotox вне форума Ответить с цитированием
Старый 03.08.2009, 08:43   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

выкладывайте модуль ЦЕЛИКОМ. (желательно проект запаковать в архив и прикрепить к сообщению через расширенный режим).
Access violation это обычно ошибки обращения к "чужой" памяти. Причина чаще всего в том, что объект, методы или свойства которого вызываются — не был создан.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 17:13   #8
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

//del, смотрите первый пост

Последний раз редактировалось zotox; 03.08.2009 в 18:45.
zotox вне форума Ответить с цитированием
Старый 03.08.2009, 18:34   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если удалить переменную из описания глобальных переменных и сунуть ее в опис. переменных процедуры (форм.крейт) то будет нормально работать но возникает другая проблема! Что так не идет, нужно чтобы описание переменной было глобальной а не процедурной
что не так идёт?! Куда и зачем Вы перенесли описание переменных? Что Вы вообще хотите получить?!!
может стоит всё таки выложить модуль ЦЕЛИКОМ?!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 18:40   #10
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что не так идёт?! Куда и зачем Вы перенесли описание переменных? Что Вы вообще хотите получить?!!
может стоит всё таки выложить модуль ЦЕЛИКОМ?!!!
Не понимаете значит пройдите мимо, по другому для вас не могу объяснить. Глобальное описание переменных... Это значит объявление переменных в VAR'е выше всех процедур/функций (чуть подредактировать первый пост, для понятливости)

Цитата:
может стоит всё таки выложить модуль ЦЕЛИКОМ?!!!
МОДУЛЬ И ВСЕ ОСТАЛЬНОЕ В ПЕРВОМ ПОСТЕ!!!

Последний раз редактировалось zotox; 03.08.2009 в 18:48.
zotox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не хочет работать OpenPictureDialog guffer Общие вопросы Delphi 4 08.07.2009 20:14
Не хочет загружаться zotox Помощь студентам 9 04.05.2009 17:30
Что хочет программист? Я Оля Свободное общение 1 10.11.2008 15:23
Кто хочет кнопку? Altera Компоненты Delphi 23 12.05.2008 17:01
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01