Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
1

цикл while в массиве строк

24.01.2012, 21:01. Показов 1806. Ответов 19
Метки нет (Все метки)

помогите с циклом while. из массива строк нужно найти строку 'ВРЕМЯ' которая встречается много раз, если нашли, то переносим в memo2 эту строку и еще 3 строки последующие, трудность в том что не получается использовать цикл while, c repeat разобрался но он здесь не нужен, и еще как программно использовать номер елемента массива, т.е допустим 'ВРЕМЯ' встречается в девятой строке, значит нужно перенести 9, 10,11,12 строку, трудность в том что начальная строка не известна
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2012, 21:01
Ответы с готовыми решениями:

Хэш функция строк (строк в массиве может быть около 2 миллионов)
Подскажите пожалуйста алгоритм хэш функции для строк , строк в массиве может быть около 2...

Алгоритм и структура для поиска большого количества строк в другом массиве строк
Здравствуйте! Я решаю следующую задачу: Есть файл со "строками" (средняя длина которых 40-50...

Сортировка первого элемента строк в массиве строк
Есть файл, в нём подобная структура: 12 fas fksk ksksk sksk 15 ldl kska kskd kfkf 9 kaka kskd...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

19
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 09:07 2
начальная строка пол логике должна иметь индекс 1
код примерно такой
Delphi
1
2
3
4
5
6
7
8
9
while i<lenght(имя_массива) do begin
if имя_массива[i]='ВРЕМЯ' then begin
memo2.lines.add(inttostr(i)+' '+имя_массива[i]);
for k:=1 to 3 do begin //количество строк которые надо считать после искомой
inc(i);
memo2.lines.add(inttostr(i)+' '+имя_массива[i]);
end;
end;
end;
м.б. чтонить поправить надо будет код на ходу писал
1
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:03  [ТС] 3
похоже что цикл незавершается

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.btn1Click(Sender: TObject);
 const
size=999;
var
a: array[1..size] of string[255];
i,k: integer;
cbr: string;
 found: Boolean;
 
 begin
   for i:=0 to size do
   a[i]:=Form1.mmo1.Lines[i-1];
   cbr:='âðåìÿ';
   found:=False;
   i:=1;
 
  while i<Length(a[i]) do
  begin
     if a[i]='ÂÐÅÌß' then
      begin
    mmo2.lines.add(inttostr(i)+' '+a[i]);
      for k:=1 to 3 do begin //êîëè÷åñòâî ñòðîê êîòîðûå íàäî ñ÷èòàòü ïîñëå èñêîìîé
      inc(i);
      mmo2.lines.add(inttostr(i)+' '+a[i]);
     end;
 
 
    end;
 
    end;
    end;
    end.
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:04 4
забыл про увеличение счетчика вне условия
Delphi
1
2
3
4
5
6
7
8
9
10
while i<lenght(имя_массива) do begin
if имя_массива[i]='ВРЕМЯ' then begin
memo2.lines.add(inttostr(i)+' '+имя_массива[i]);
for k:=1 to 3 do begin //количество строк которые надо считать после искомой
inc(i);
memo2.lines.add(inttostr(i)+' '+имя_массива[i]);
end;
end;
inc(i);
end;
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:12  [ТС] 5
все равно не помогает программа подвисает и не выдает результат
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:14 6
попробуй пошаговую отладку и поссмори в каком месте зацикливается
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:18  [ТС] 7
for i:=1 to size do
все
равно так же
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:29 8
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
const
size=999;
var
a: array [1..size] of string;
i,k: integer;
cbr: string;
 found: Boolean;
 begin
   for i:=1 to Memo1.Lines.Count do
   a[i]:=memo1.Lines[i];
   i:=1;
  while i<Length(a) do
  begin
     if a[i]='Время' then
     begin
      memo2.lines.add(inttostr(i)+' '+a[i]);
      for k:=1 to 3 do begin //количество строк которые надо считать после искомой
        inc(i);
        memo2.lines.add(inttostr(i)+' '+a[i]);
      end;
     end;
     inc(i);
  end;
    end;
как то так
1
429 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
25.01.2012, 12:41 9
а если в мемо больше тыщи строк окажеца?
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:42 10
это вопрос мне или ТСу?)
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:44  [ТС] 11
спасибо
0
Житель Земли
2982 / 2969 / 391
Регистрация: 26.07.2011
Сообщений: 11,399
Записей в блоге: 1
25.01.2012, 12:45 12
уточни: слово "ВРЕМЯ" единственное в строке или может быть так: "бла..ВРЕМЯ блабла"?
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:45  [ТС] 13
а если больше то при вводе массива в memo введем условие об ошибке, и пусть обрабатывает только
999 строк
0
429 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
25.01.2012, 12:48 14
мож проще сделать размер масива равным кол-ву строк в мемо?
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:48  [ТС] 15
Цитата Сообщение от DenNik Посмотреть сообщение
уточни: слово "ВРЕМЯ" единственное в строке или может быть так: "бла..ВРЕМЯ блабла"?
как раз с этим были загвоздки,
в проге нужно будет искать не только время, поэтому я ввел переменную cbr, tot hfз спасибо за помощь
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:49 16
Цитата Сообщение от linkoln-lp Посмотреть сообщение
а если больше то при вводе массива в memo введем условие об ошибке, и пусть обрабатывает только
999 строк
замени на
Delphi
1
a: array of string;
и вначале процедуры добавь
Delphi
1
SetLength(a,Memo1.Lines.Count);
0
13 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 28
25.01.2012, 12:50  [ТС] 17
Цитата Сообщение от БогДелфей Посмотреть сообщение
мож проще сделать размер масива равным кол-ву строк в мемо?
а я не знаю как и не хочу заморачиваться, 999 меня вполне устраивает
0
429 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
25.01.2012, 12:51 18
Цитата Сообщение от linkoln-lp Посмотреть сообщение
999 меня вполне устраивает
почему не 666?
0
39 / 39 / 4
Регистрация: 20.04.2011
Сообщений: 789
Записей в блоге: 1
25.01.2012, 12:51 19
linkoln-lp, предидущий пост смотри, исправишь будет использоваться динамический массив
0
Житель Земли
2982 / 2969 / 391
Регистрация: 26.07.2011
Сообщений: 11,399
Записей в блоге: 1
25.01.2012, 12:59 20
для случая, когда в строке только слово "ВРЕМЯ"

еще прими во внимание, что работа с массивом строк непосредственно
в поле МЕМО очень сильно замедляет выполнение цикла, поэтому
лучше работать со строками в памяти, а в МЕМО выводить готовый результат

итак...

будем считать, что в МЕМО1 уже загружен массив строк

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var
  List1: TStringList;
  i: Cardinal;
  n: byte;
begin
  // результирующий массив
  List1:= TStringList.Create;
  // запускаем цикл чтения исходного массива
  for i:= 0 to Memo1.Lines.Count - 1 do
  if Memo1.Lines[i] = 'ВРЕМЯ' then   // если встретилась строка ВРЕМЯ
  begin
    // запуск цикла чтения трех строк после слова ВРЕМЯ
    for n:= 0 to 3 do
      List1.Append(Memo1.Lines[i+n]);
  end;
  Memo2.Lines.Assign(List1);
  List1.Free;
end;
думаю, проще уже некуда. ЗАщиту от ошибки пустого поля МЕМО1 добавишь сам
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2012, 12:59
Помогаю со студенческими работами здесь

Не срабатывает цикл в массиве
Добрый день. Занимаюсь освоением Java по книге Герберта Шилда. В общем, всё довольно понятно и...

В двумерном массиве заменить элементы строк с четными индексами элементами строк с нечетными индексами
Дан массив чисел, А (5, 4). Превратить массив , заменив элементы строк с четными индексами...

Цикл подсчета строк
Добрый вечер, подскажите пожалуйста с циклом подсчета строк, суть поставленной задачи такова :...

Цикл поиска в массиве и вывод
Добрый день. Непонятно организация нескольких вещей в коде. &lt;?php $stop_ips_masks = ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru