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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 16:56   #1
aquatell
 
Регистрация: 16.04.2011
Сообщений: 9
По умолчанию Очень надо !!! Поиск вхождений строк в массиве

Всем привет!
Есть поле Memo с неким текстом.
И сеть такая функция которая поместить в массив из поля Memo слова, вот она
Код:
type
  TArrWords = array of String;
 
//Возвращает массив всех слов, наёднных в строке aStr.
function ExtractWords(const aStr : String) : TArrWords;
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  //Величина приращения длины динамического массива.
  Capacity = 10;
var
  i, j, Pos1, Len : Integer;
begin
  Len := Length(aStr);
  Pos1 := 0;
  j := 0;
  for i := 1 to Len do begin
    //Пропускаем разделители.
    if aStr[i] in D then Continue;
    //Отслеживаем начало слова.
    if (i = 1) or (aStr[i - 1] in D) then Pos1 := i;
    //Отслеживаем конец слова.
    if (i = Len) or (aStr[i + 1] in D) then begin
      //Если требуется, увеличиваем длину динамического массива.
      if j = Length(Result) then SetLength(Result, j + Capacity);
      //Добавляем слово в массив.
      Result[j] := Copy(aStr, Pos1, i - Pos1 + 1);
      //Индекс следующего элемента массива.
      j := j + 1;
    end;
  end;
  //Корректируем длину массива, в соответствие с количеством
  //добавленных в него элементов.
  if j < Length(Result) then SetLength(Result, j);
end;
 
//Проверка работы функции ExtractWords().
procedure TForm1.Button1Click(Sender: TObject);
var
  Arr : TArrWords;
  i : Integer;
begin
  Memo2.Clear;
  Arr := ExtractWords(Memo1.Text);
  for i := 0 to High(Arr) do begin
    Memo2.Lines.Add(Arr[i]);
  end;
  //Удаляем динамический массив из памяти.
  Finalize(Arr);
end;
А теперь вопрос - как в этом массиве выполнить поиск вхождений каждого уникального слова в этом массиве и потом выгрузить эту ифнормацию например в StringGrid - в виде "Слово" и сколько раз встретилось в массиве?

Есть кое какая идея но не получается реализовать и заключается она в следующем - надо в цикле пройтись по этому массиву берем слово и ищем его дальше по всему массиву, если оно уникально и встретилось 1 раз и передаем в заранее заготовленную процедуру которая будет добавлять в StringGrid это слово и сколько раз оно встретилось в массиве.
А если оно не уникально встретилось 2 и более раз, тогда текущую позицию где она больше первой, т.к. в первой это будет наше искомое слово мы должны сместить например так:
Код:
  a[i - 1] := a[i]; // здесь мы сдвигаем найденную позицию, только в том случае если слово найдено больше одного раза
SetLength(a, Length(a) - 1);// а здесь мы меняем размер массива на минус 1 так как мы же сместили на 1 вниз, таким образом убираются все неуникальные позиции.
Сколько раз встретилось неуникальное слово мы должны подсчитывать
и потом передавать в процедуру добавления в StringGrid этого слова и сколько раз мы его встретили.

Очень нужно Срочно. Прошу откликнуться всех у кого есть идеи по этому поводу и кто может помочь реализовать это. Заранее ОГРОМНОЕ СПАСИБО!

Последний раз редактировалось aquatell; 20.04.2011 в 17:06.
aquatell вне форума Ответить с цитированием
Старый 20.04.2011, 21:07   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Массив тут нафих не нужен - со всеми условиями задачи успешно справится класс TStringList/
Но перед его боевым использованием следует исключить из обрабатываемого текста символы-разделители слов - для этого вполне подойдет циклический вызов StringReplace.
mss вне форума Ответить с цитированием
Старый 20.04.2011, 21:18   #3
aquatell
 
Регистрация: 16.04.2011
Сообщений: 9
По умолчанию

mss
а код написать можно?
aquatell вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск строки в массиве строк C++ KuckaMAXHATKA Помощь студентам 0 19.02.2011 15:52
поиск текста(эл-т массива) в массиве строк peq Microsoft Office Excel 2 16.04.2010 15:11
Поиск в массиве строк. (visual basic) Mikle1990 Помощь студентам 7 19.03.2010 09:44