Здравствуйте! Как организовать поиск файлов на диске по содержимому. Точнее: есть папка с doc-файлами, нужно вывести список файлов, содежащих введенное слово (словосочетание).
Доброе время суток, Orlando! Стандартно. В цикле открываешь все файлы, потом каждый читаешь и ищешь что надо. Быстрый поиск строк можно посмотреть в Кнута "Искуство программирования". В Инете книга есть.
Ответ отправлен: 03.07.2002, 14:51 Отправитель: Sensey Отвечает Ayl
Доброе время суток, Orlando! Алгоритм такой. Ищешь все файлы по заданной маске по заданным каталогам. Для каждого файла открываешь его и в нем ищешь свое словосочетание. Если нашел - выводишь имя файла. Переходишь к поиску следующего.
Ответ отправлен: 03.07.2002, 14:00 Отправитель: Ayl Отвечает vitya
Доброе время суток, Orlando! Как итерировать файлы я не рассказываю, это легко, теперь как искать подстроку в файле. Могу предложить два способа 1. Медленный но простой Итак, с помощью fopen() открываешь файл, потом с помощью fgets() читаешь строчки, а потом вызываешь strstr(), если возврат не NULL, значит эта подстрока там есть. 2. Побыстрее, но сложнее. Открываешь с помощью CreateFile(), сождаешь отображаемый в память файл (CreateFileMapping, MapViewOfFile), и вызываешь все ту же strstr(). Ответ отправлен: 03.07.2002, 13:56 Отправитель: vitya Отвечает dmi
Добрый день, Orlando! есть такая штука, как FindFirst.. Честно говоря не хочется сейчас рыться, но если припечет, - напиши мне на мыло procmaker@pochtamt.ru By Ответ отправлен: 03.07.2002, 13:52 Отправитель: dmi Отвечает Xidden
Доброе время суток, Orlando! Если честно, я не знаю формат доковских документов. А с обычными фйлами я бы поступил просто: используй ф-цию sysread() для чтения файлов в буфер (посмотри ее описание поподробней), и длину буфера в 1024 или больше, потом в цикле ищи в буфере нужные словосочетания. Ищи обычным перебором. сравнивая все куски текста равные по длинне с нужным тебе,(для этого в отдельный массив выбирай куски из буфера нужной длины и сравнивай) for(i=0;i<=len_of_buf;i++){ for(j=0;j<=len_of_string;j++){ temp[j]=buf[i++]; } if (temp=string) {...} }} Вообщем что-то типа этого. Может я тут че-то наврал просто тороплюсь сильно.
Ответ отправлен: 04.07.2002, 00:03 Отправитель: Xidden Отвечает kvINT
Доброе время суток, Orlando! Если тебе просто надо найти, то Пуск->Найти->Файлы и папки. Если же программу хочешь написать, то открывай все файлы по очереди и просматривай их полностью. Используй, например, ф-цию strcmp из string.h для сравнения со своим словом.
Ответ отправлен: 04.07.2002, 12:18 Отправитель: kvINT
Вопрос № 105
Не знаете где можно достать нормальный русский справочник по API и по Buldier'у ?
Приветствую Вас, Влад! Посмотри в Инете. Загляни на winapi.h1.ru там есть описание Апи но не всех. А по Билдеру точно есть и много. Юзай поисковики.А еще поспрашивай в рассылке по асму.
Ответ отправлен: 03.07.2002, 23:54 Отправитель: Xidden Отвечает Zloy
Приветствую Вас, Влад! Нормальный справочник по API - это всем известная MSDN :))) А справку на русском можно взять тут: http://winapi.h1.ru Есть у меня одна книжка по Билдеру 20 метров (картинок там много) сразу кидать не решился, но если очень надо zloy-site@mail.ru Ответ отправлен: 04.07.2002, 19:19 Отправитель: Zloy Отвечает kvINT
Доброе время суток, Влад! Есть справочник по API на русском для VB, но это не суть важно. Главное, что он не полный, полная версия платная. http://rusproject.newmail.ru E-mail: vbasic@rambler.ru
Ответ отправлен: 04.07.2002, 12:18 Отправитель: kvINT
Вопрос № 106
Уважаемые эксперты! Подскажите пожалуйста какой пакет лучше для работы с С/С++, Borland C++ 3.1 или Turbo C++ 3.0, просто у меня Borland C++ 3.1 Инагда подвисает а, с Turbo C++ 3.0 вот я и не знаю какой все таки лучше или может другой какой нибудь, да если можно посоветуйте каким компилятором пользоватся у меня есть от BorlandC++ 5.0;Quick C 2.0; Symantec C++ 6.1; Watcom C 10-95; как делать assm вставки,у меня почему то не работают Зарание благодарен.
Доброе время суток, Roman! Точно не помню, но в этом компиляторе нужно поставить директиву #pragma inline Поставь турбо С++ 3.0 и :) он маленький и быстрый - хорош для ДОс-а Ответ отправлен: 04.07.2002, 10:42 Отправитель: AnSim Отвечает kostik
Здравствуйте, Roman! В программе должна быть директива #pragma inline. Из перечисленных Вам еомпиляторов я бы посоветовал испольовать Turbo C++ 3,0.
Ответ отправлен: 06.07.2002, 13:35 Отправитель: kostik Отвечает Zloy
Приветствую Вас, Roman! Мне нравятся BC++ 5.02 и BC++ 3.1 А про асм: может быть у тебя не указана опция [-B] при компиляции. Или в программе задать директиву #pragma inline
Ответ отправлен: 04.07.2002, 19:19 Отправитель: Zloy Отвечает NAD
Приветствую Вас, Roman! На вижал с++ асм. вставки делаются так: _asm { //... } Ответ отправлен: 03.07.2002, 20:59 Отправитель: NAD Отвечает vitya
Доброе время суток, Roman! если тебя интересует под ДОС то BC++ 3.1 или 5.0(2), a под Windows советовал бы VC++ ну в крайнем случает BC++Builder для ассемблерных вставок же рекомендую писать так asm mov ax, 03h; asm int 21h;
Ответ отправлен: 04.07.2002, 08:28 Отправитель: vitya
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.