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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2021, 02:40   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Передать в процедуру массив строк неизвестной длины, или неизвестное количество строк

Суть задачи: нужно определить, есть ли в папке файл, который имеет нужно окончание. И вопрос в том, что может быть несколько вариантов окончания

Внимание, процедура вложена внутрь функции, потому в ней присутствует обращение к Result

Код:
  Procedure spets;
  var
    s1, s2:string34;
    i:word;
    Dir:string;

    SearchRec: TSearchRec;
  begin
      s1:=AnsiUpperCase(edit9.Text); {копируем слово, на которое должен заканчиваться файл}

      Dir := IncludeTrailingBackslash(memo1.Lines[ind]); {получаем имя папки}
      if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then begin
        repeat
          Application.ProcessMessages;
          if (SearchRec.Attr and faDirectory)=0 then begin
            s2:=rasr(SearchRec.Name, length(s1)+3); {возвращает окончание строки, применив UpCase}
            If (s2=s1+'.JPG') or (s2=s1+'.MP4') then begin
              result:=true;
              FindClose(SearchRec);
              exit;
            end;
          end;
        until FindNext(SearchRec)<>0;
      end;
      result:=false;
      FindClose(SearchRec);     
  end;
Этот код вполне рабочий, но проблема в том, что он НЕ универсальный. И рядом есть похожая процедура, у которой есть уже 4 возможных "положительных" ответа

И вот меня интересует, как передать в универсальную функцию неизвестное число строк - в одном случае 2, в другом - 4 ?
Kronos913 вне форума Ответить с цитированием
Старый 07.12.2021, 02:43   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Вот вторая процедура. С которой в единый код хочется объединить первую

Код:
  Procedure vizitka_1;
  var
    s2:string34;
    i:word;
    Dir:string;

    SearchRec: TSearchRec;
  begin
      Dir := IncludeTrailingBackslash(memo1.Lines[ind]);
      if FindFirst(Dir + '*.mp4', faAnyFile, SearchRec) = 0 then begin
        repeat
          Application.ProcessMessages;
          if (SearchRec.Attr and faDirectory)=0 then begin
            s2:=rasr(SearchRec.Name, 14);
            If (rasr(SearchRec.Name, 10)='VIZITKA.MP4') or (s2='VIZITKA_ENG.MP4') or (s2='VIZITKA_RUS.MP4') or (rasr(SearchRec.Name, 16)='VIDEOPLAYBACK.MP4') then begin
              result:=true;
              FindClose(SearchRec);
              exit;
            end;
          end;
        until FindNext(SearchRec)<>0;
      end;
      result:=false;
      FindClose(SearchRec);
  end;
Kronos913 вне форума Ответить с цитированием
Старый 07.12.2021, 09:38   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. объединить ( а потом разъединить) в одну строку с использованием любого заведомо невозможного знака(символа) (например ";")

2. использовать "контейнер" наследник TStrings (TStringList)

3. использовать строку из первого варианта для заполнения контейнера из второго варианта.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан текст, состоящий из строк произвольной длины. Обработать текст, подсчитав количество строк и отсортировав их (Паскаль) Александр_Прог Помощь студентам 3 24.03.2014 14:37
В предложении из трех слов вывести слова в порядке нарастания их длины. Предложение описать как массив строк. Nilip 777 Помощь студентам 0 20.11.2013 17:32
Определить количество строк в максимальном множестве попарно непохожих строк заданной матрицы Cи/С++ FleXt Помощь студентам 12 17.12.2012 14:42
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
Ввести последовательность строк. Подсчитать количество совпадающих строк. на языке SHELL lj23lj Фриланс 1 30.03.2012 16:41