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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2010, 22:21   #1
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию снова Мемо

Здравствуйте!
Столкнулся вот с такой задачей:
В компоненте MEMO1 есть данные в виде(после каждой оценки пробел):
Код:
Иванов   2 1 6 11 3 1 9 3 8 8 5 6 10 7 
Петров   7 2 5 7 2 10 4
Нужно в MEMO2 записать данные но только при определенных условиях:
выбрать с каждой строки MEMO1 "n" последних оценок, которые соответсвуют заданной величине оценки "х"
Например: при условии выбрать 4 последних оценки, если оценка больше 4 баллов
в МЕМО2 будет записано:
Код:
Иванов   5 6 10 7
P.S: Строка "Петров" не будет отображена в МЕМО2, так как третья оценка в МЕМО1 2, а в условии должно быть больше 4

Каким образом это можно реализовать? Спасибо.
начинающий1 вне форума Ответить с цитированием
Старый 24.08.2010, 04:16   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Каким образом это можно реализовать?
C помощью БД. Все остальное - геммор.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 24.08.2010, 07:08   #3
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Я могу тут конечно написать тебе способ, с copy, delete,pos и т.д. Как как сказал artemavd:
Цитата:
C помощью БД. Все остальное - геммор.
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 24.08.2010, 10:17   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

с использованием TstringList и без контроля правильности заполнения Memo1
Код:
list:=TstringList.create;
list.delimiter:=' ';
for j:=0 to memo1.count-1 do
begin
  list.clear; 
  list.delimitertext:=memo1.lines[j];
  m:=0;
  for k:=list.count-1 do 2 do
  begin
    if m>=n then list.delete(k)
    else if strtoint(list.strings[k])>=x then mm:=mm+1
    else begin list.clear; break; end;
  end;
  if list.count=1+n then 
    memo2.lines.add(list.delimitertext);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.08.2010 в 10:20.
evg_m вне форума Ответить с цитированием
Старый 25.08.2010, 01:22   #5
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию

evg_m
Спасибо, немного поправив синтаксические ошибки код запускается, но не работает как хотелось бы, так как мне не понятно значение некоторых переменных(им соответственно не присвоены значения), а именно:
n и x

Код:
list:=TstringList.create;
   list.delimiter:=' ';
for j:=0 to memo1.Lines.Count-1 do
begin
  list.clear;
  list.delimitedtext:=memo1.lines[j];
  m:=0;
  for k:=list.count-1 to 2 do
  begin
    if m>=n then list.delete(k)
    else if strtoint(list.strings[k])>=x then mm:=mm+1
    else begin list.clear; break; end;
  end;
  if list.Count = 1+n then
    memo2.lines.add(list.delimitedtext);
end;
Если не трудно прокомментируйте эти строчки кода(мне не все понятно)
Код:
 
 if m>=n then list.delete(k)
    else if strtoint(list.strings[k])>=x then mm:=mm+1
    else begin list.clear; break; end;
  end;
  if list.Count = 1+n then
    memo2.lines.add(list.delimitedtext);
Спасибо.
начинающий1 вне форума Ответить с цитированием
Старый 25.08.2010, 01:42   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
мне не понятно значение некоторых переменных ... , а именно: n и x

Цитата:
выбрать с каждой строки MEMO1 "n" последних оценок, которые соответсвуют заданной величине оценки "х"
Код:
  SL := TStringList.Create;
  SL.Delimiter := ' ';
  for j := 0 to Memo1.Lines.Count-1 do begin
    SL.Clear;
    SL.DelimitedText := Memo1.Lines[j];
    m := 0;
    for k := SL.Count-1 downto 1 do begin
      if m >= n then begin
        SL.Delete (k);
      end
      else begin
        if StrToInt (SL.Strings[k]) >= x then begin
          m := m + 1;
        end
        else begin
          SL.Clear;
          Break;
        end;
      end;
    end;
    if SL.Count = 1+n then
      Memo2.Lines.Add (SL.DelimitedText);
  end;
Sibedir вне форума Ответить с цитированием
Старый 25.08.2010, 02:17   #7
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию

Sibedir
Спасибо, код работает как часы.
начинающий1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мемо bulldog5293 Работа с сетью в Delphi 3 13.07.2010 21:43
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Как скопировать текст из мемо одной формы в мемо другой CraZZy RabbIt Общие вопросы Delphi 4 27.02.2009 00:01
мемо ben95 Общие вопросы Delphi 1 29.01.2008 10:10
Строки в Мемо BETONOMESHALKA Общие вопросы Delphi 6 17.11.2007 02:01