|
|
#1
|
|||
|
|||
Работа с циклами
Доброго времени суток товарищи!
Такой вопрос: загружаю в лист бокс большой файл похожий на ini выглядит он так: Заголовок ....... ......... ..... Конец Примечания ..... . .... Конец мне необходимо получить информацию из раздела "заголовок" все включающиеся строчки до фразы "конец" вот предлагаю алгоритм что не так подскажите? Код:
form5.ListBox1.ItemIndex := 0; for a := 0 to form5.ListBox1.Items.Count -1 do begin if Form5.ListBox1.Items[Form5.ListBox1.ItemIndex] = 'Заголовок' then begin while Form5.ListBox1.Items[Form5.ListBox1.ItemIndex] = 'Тема' do begin form5.Memo3.Lines.Add(form5.ListBox1.Items[Form5.ListBox1.itemindex]); form5.ListBox1.ItemIndex := form5.ListBox1.ItemIndex + 1; end; end; end; может я не тот цикл использую? |
#2
|
||||
|
||||
В чём проблема скажешь?
|
#3
|
|||
|
|||
проблемма в том что виснет..., стоки явно не добавляет, вобщем я не могу посмотреть форму 5 что там творится.. программа виснет.
|
#4
|
||||
|
||||
Попробуй так:
Код:
form5.ListBox1.ItemIndex := 0; for a := 0 to form5.ListBox1.Items.Count -1 do begin if Form5.ListBox1.Items[Form5.ListBox1.ItemIndex] = 'Заголовок' then Break; end; |
#5
|
|||
|
|||
использую вот это
Код:
var a:integer; begin a:=0; while a<Form5.ListBox1.Count do begin if Form5.ListBox1.Items[a]='Заголовок' then begin inc(a); while Form5.ListBox1.Items[a]<>'Конец' do begin Form5.Memo3.Lines.Add(Form5.ListBox1.Items[a]); inc(a); end end; inc(a); end end; но почему то вылетает ошибка - EstringListError - list index out of bounds (..) а так всё работает.. видно до ошибки заполняет.. |
#6
|
||||
|
||||
Исправь проверку, хоть так:
Код:
... while (Form5.ListBox1.Items[a]<>'Конец') or (a = Form5.ListBox.Count) do ... Или же Код:
var S: TStringList; i, k: Integer; begin S:=TStringList.Create; S.Add('Заголовок.'); S.Add('1'); S.Add('2'); S.Add('3'); S.Add('Конец.'); S.Add('4'); for i:=0 to S.Count-1 do if(AnsiUpperCase(S.Strings[i]) = 'ЗАГОЛОВОК.') then begin k:=i+1; While(AnsiUpperCase(S.Strings[k]) <> 'КОНЕЦ.') or (k = S.Count) do begin Memo1.Lines.Add(S.Strings[k]); inc(k); end; end; S.Free; Помогаю за Спасибо |