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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2008, 14:12   #1
Starscream
Пользователь
 
Аватар для Starscream
 
Регистрация: 17.02.2008
Сообщений: 18
По умолчанию Помогите заплутался.

Есть следующий файл Clubs.txt в котором записано:

Italian Clubs;
Лацио = Lazio
Милан = Milan
Интер = Inter
Рома = Roma
Ювентус = Juventus
и т. д.

English Clubs;
Манчестер Юн. = Manchester Un.
Челси = Chelsea
Арсенал = Arsenal
Ньюкасл = Newcastle
и т. д.

так вот мне нужно чтобы в ComboBox при выборе итальянский клубов загружались итальянские клубы и только их название на русском языке, а при выборе английских - английские клубы и в тотже ComboBox.При чем нужно сделать так чтобы в файл можно было дописывать новые клубы и они потом тоже будут считываться в ComboBox.
Вот код:

procedure Create_List;
var
FileList: TStringList;
i: integer;
NewStr: string;
Start, Finish, Index: integer;
Count: integer;
begin
FileList:= TStringList.Create;
FileList.LoadFromFile('Clubs.txt'); //загружаю с файла
for i:=0 to FileList.Count-1 do
begin
if FileList.Strings[i]='Italian Clubs;' then Start:=i + 1; //ищу строку Italian Clubs;
if FileList.Strings[i]='English Clubs;' then Finish:=i - 1; //ищу строку English Clubs;
end;
for i:=Start to Finish do
begin
if FileList.Strings[i]='' then //удаляю пустые строки между Italian Clubs; и English Clubs;
begin
Count:=Count + 1;
FileList.Delete(i);
end;
end;
for i:=0 to FileList.Count-1 do
begin
Index:=POS(#61, FileList.Strings[i]); //ищу '='
NewStr:=COPY(FileList.Strings[i], 1, Index-1); //копирую клубы на русском языке до символа '='
Trim(NewStr); //обрезаю пробелы
FileList.Delete(i); //удаляю старую строку
FileList.Insert(i, NewStr); //вставляю новую
end;
if Form1.SelectClubComboBox.ItemIndex= 0 then //если выбрал итальянские клубы
begin
Finish:=Finish - Count; //считаю до какого места будут читаться даные с файла
Form1.ClubsComboBox.Clear; //очищаю ComboBox
for i:=Start to Finish do Form1.ClubsComboBox.Items.Insert(i - Start, FileList.Strings[i]); //вставляю //даные
end
else if Form1.SelectClubComboBox.ItemIndex= 1 then //если выбрал английские клубы
begin
Start:=0;
Start:=Finish + 1;
Form1.ClubsComboBox.Clear;
for i:=Start to FileList.Count-1 do Form1.ClubsComboBox.Items.Insert(i - Start, FileList.Strings[i]);
end;
end;

При таком раскладе можно нормально добавлять даные и все будет ОК. Но проблема в следующем если вставить намерено пустую строку между названиями итальянских клубов то эта строка будет удалена и все прочитается нормально, а вот если вставить намерено пустую строку между названиями английских клубов то эта строка не удалиться, потому что нет кода на ее удаление, а как только я пытаюсь добавить следующий код

for i:=Finish to FileList.Count - 1 do
begin
if FileList.Strings[i]='' then //удаляю пустые строки от English Clubs; и до конца строк в списке.
begin
FileList.Delete(i);
end;
end;

то выскакивает следующее сообщение с ошибкой 'List index out of bounds (52)' и ничего не происходит, то есть ComboBox остается пустым. Если можете то помогите найти где зарыта собака или же подскажите может есть другой вариант.
Starscream вне форума Ответить с цитированием
Старый 23.02.2008, 14:17   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

удаляй с конца, а не с начала. ты удалил строку и их кол-во стало меньше и получается уже ты выходишь за границы
pu4koff вне форума Ответить с цитированием
Старый 23.02.2008, 15:19   #3
Starscream
Пользователь
 
Аватар для Starscream
 
Регистрация: 17.02.2008
Сообщений: 18
По умолчанию

pu4koff спасибо работает.
Starscream вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск