Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск по стандартной маске 
:(
    Опции темы
szz
Дата 28.10.2005, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 1
Всего: 33



Задача вот какая: есть у нас AnsiString filename="какой-то файл";
и есть маска, например "file*a.*"
Как написать функцию, принимающую маску и название файла и определяющую, подходит ли файл к маске?
Что-то я сегодня торможу нипадеццки...

Ах да: маска должна быть еще проще чем стандартная: вопросики не нужны, только звездочки...

Это сообщение отредактировал(а) szz - 28.10.2005, 00:06


--------------------
PM   Вверх
Neitron
Дата 28.10.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: нет
Всего: 5



FindFirstFile умеет искать по маске.
Хотя думаю, тебе нужно будет написать свою регулярку.

Это сообщение отредактировал(а) Neitron - 28.10.2005, 11:11


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Artemon
Дата 28.10.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



В чем проблема, что-то я не пойму, дело ведь только в парсинге текста......................


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
szz
Дата 28.10.2005, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 1
Всего: 33



Ага, в нем-то все и дело. Надо просто написать такую функцию:
Код

bool MatchMask(AnsiString filename, AnsiString mask){
   // вот в этом все дело...
}

MatchMask("myfile.txt", "*.txt");// должно вернуть true

MatchMask("mypic.jpg", "*.a*");// должно вернуть false




--------------------
PM   Вверх
livo
Дата 9.10.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Столкнулся с проблемой отбора файлов по фильтру, но на форуме не нашел ничего по созданию алгоритма, который бы оценивал соответствие определенной строки заданной маске. Решил написать собственный: вроде работает, но хотел бы быть уверенным. А то я так увлекся своей линией мысли, что мог упустить какую-то деталь.
Код

bool __fastcall match(String mask,String str)
{
 if(mask=="" || str=="")return 0;
 char *pm=mask.c_str(),*ps=str.c_str();
 int mi,si,i,j,mlen,slen; bool star,tstar;
 mi=si=0; i=j=0; star=tstar=0;
 mlen=mask.Length(); slen=str.Length();
 while(mi<mlen)
 {
   switch(pm[mi])
   {
     case '*': star=1; break;
     default:
     {
       tstar=0; 
       for(i=mi,j=si; i<=mlen && j<=slen; i++,j++)
       {
         switch(pm[i])
         {
           case '*': mi=i; si=j; tstar=star=1; break;
           case '?': if(j==slen)return 0; else continue;
           default:
             if(pm[i]!=ps[j])
             {
               if(!star)return 0;
               i=mi-1;
               j=si++;
             }
         }
         if(tstar)break;
       }
       if(!tstar)
       {
         if(j>slen)while(i<mlen)if(pm[i++]!='*')return 0;
         return 1;
       }
     }
   }
   mi++;
 }
 return 1;
}

PM MAIL   Вверх
xvr
Дата 11.10.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(livo @  9.10.2010,  12:56 Найти цитируемый пост)
А то я так увлекся своей линией мысли, что мог упустить какую-то деталь.
Угу, например наличие стандартной VCL функции, которая это делает (MatchesMask называется)


PM MAIL   Вверх
livo
Дата 19.10.2010, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



xvr, спасибо конечно за информацию, но что-то VCL>MatchesMask возвращает TRUE тогда, когда возвращать должна FALSE. 
Я ввел маску "??" (строки, состоящие из двух любых символов), а мне выдались и строки с меньшим количеством символов.
Зачем же мне функция, в которой я не могу быть до конца уверен?
PM MAIL   Вверх
mrbrooks
Дата 19.10.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



livo если юзаешь дебилдер >= 2007 обрати внимание на Boost.Filesystem. Это определенно лучше своих костылей.

Добавлено через 1 минуту и 5 секунд
Цитата(livo @  19.10.2010,  02:22 Найти цитируемый пост)
но что-то VCL>MatchesMask возвращает TRUE тогда, когда возвращать должна FALSE. 

это общепризнанный баг или действия чьих то рук?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.