![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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 остается пустым. Если можете то помогите найти где зарыта собака или же подскажите может есть другой вариант. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
удаляй с конца, а не с начала. ты удалил строку и их кол-во стало меньше и получается уже ты выходишь за границы
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 18
|
![]()
pu4koff спасибо работает.
|
![]() |
![]() |