Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 214

/ вопрос закрыт /

Здравствуйте, уважаемые эксперты! Главная моя задача: Совершить поиск txt файлов по папкам C:/1, C:/1/2, C:/1/2/3.......C:/1/2/3/4/5/6/7/8/9 и переименовать их в 'ненужный файл.txt'.
--------------------------------------------------------------------------------------
Примечания:
1. Так, как меня учитель считает продвинутым в сфере программирования, мне дали условие - НЕ использовать memo Т_Т
2. Если у вас нет примеров кода, прошу хотябы подтолкнуть на верный путь(подсказать, с чем иметь дело в данной ситуации)
3. Сильно не толкать(Если вы будете выражаться умными словами, я могу не понять вас).

Кудя Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Кудя (статус: Посетитель)
Вопрос отправлен: 19 апреля 2011, 19:18
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 122; последнее сообщение — 27 апреля 2011, 19:15; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [7] [Следующая »]

Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 20:50 [#41]:

та часть которая всё запустить, это.....например что? Я всё, что есть сюда скопировал
Think Different. (c)
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 20:54 [#42]:

блин, за 5страниц толка никакого =(
Think Different. (c)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:00 [#43]:

Цитата (Кудя):

блин, за 5страниц толка никакого =(

Это у тебя 5 страниц, а у меня ещё первая не закончилась.

Цитата (Кудя):

1.3 Добавление имён в список --- Но как? Form запрещено

Форма тут нах не нужна. Если ты думаешь, что список (строк, например) можно хранить только в TMemo или в TListBox, то иди быстро курить учебник про потомки TStrings, в частности - про TStringList.

Цитата (Кудя):

.. begin DoIt('C:'); .... непомогло

Ну так воспользуйся отладчиком, пройдись по шагам, посмотри, чему равны значения переменных.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 19 апреля 2011, 21:02 [#44]:

итак, поехали:
program excersise204;
uses
  Classes, windows, SysUtils;
 
procedure DoIt(const Dir: string);
var
  SR: TSearchRec;
begin
  SetCurrentDir(Dir);
  if FindFirst(Dir + '*.txt', faAnyFile, SR) = 0 then
           // ага! если в каталоге нет файла или папки с расширением txt, то
           // цикл просто не запустится и произойдёт выход из процедуры
  begin
    repeat
      if (SR.Name <> '.') and (SR.Name <> '..') then  // лишнее. всегда сработает, т.к.
                                                      // каталоги . и .. точно не соответствуют
                                                      // маске *.txt
      begin
        RenameFile(SR.Name, AnsiLowerCase(SR.Name));   // супер! переименовываем файл, а новое имя
                                                       // какое? а то же самое! :)
        if (SR.Attr and faDirectory) <> 0 then   // если найдётся папка, которая будет иметь
                                                 // расширение txt, то вход в неё будет
          DoIt(Dir + SR.Name + '\');
      end;
    until FindNext(SR) <> 0;
  FindClose(SR);
  end;
end;
 
// ну и процедура сама по себе не вызовется. её надо как-то вызвать
// например, так:
begin
  DoIt('C:');
end.

как решить задачу входа в каталоги, не имеющие расширения txt? нужно делать два цикла FindFirst/FindNext/FindClose - в первом искать и переименовывать файлы, во втором - искать каталоги.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:04 [#45]:

Такс. Вот смотрите, уважаемые эксперты. Я умею делать поиск, умею переименовывать, но только если у меня есть чётко поставленный каталог. Следовательно у меня ошибка должна быть только в одном : я немогу искать в подкаталогах и в подподподподкаталогах. Помогите только с этим, остальное я много практиковался, разберусь.
Think Different. (c)
Егор

Егор (статус: 10-ый класс), 19 апреля 2011, 21:07 [#46]:

кстати...
1) SetCurrentDir(Dir);
в конце процедуры нужно вернуться из той папки - для этого делаем SetCurrentDir('..');
2) очень! очень! и очень! важно! сначала перебираем все файлы, а только ПОТОМ входим в каталоги. иначе будет не очень хорошо.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:08 [#47]:

Цитата (Кудя):

Такс. Вот смотрите, уважаемые эксперты. Я умею делать поиск, умею переименовывать, но только если у меня есть чётко поставленный каталог. Следовательно у меня ошибка должна быть только в одном : я немогу искать в подкаталогах и в подподподподкаталогах. Помогите только с этим, остальное я много практиковался, разберусь.

Тут нужна рекурсия. В инете примеров - 100500 мильёнов штук и ещё немножко. Зайди на Delphi World, поищи по фразе "поиск файлов".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:09 [#48]:

program excersise204;
uses
  Classes, windows, SysUtils;
 
procedure DoIt(const Dir: string);
var
  SR: TSearchRec;
begin
  SetCurrentDir(Dir);
  FindFirst(Dir + '*.txt', faAnyFile, SR);
begin
        RenameFile(SR.Name, 'НенужныйФайл.txt');
        if (SR.Attr and faDirectory) <> 0 then   // Тут я непонял, папка не может иметь расширение тхт
          DoIt(Dir + SR.Name + '\');
      end;
    until FindNext(SR) <> 0;
  FindClose(SR);
  end;
end;
begin
  DoIt('C:');
end.
Think Different. (c)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:11 [#49]:

И не надо всё делать в один присест. Сначала нужно составить список файлов с путями, у же потом переименовывать их.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:12 [#50]:

там примеры имеют form
Think Different. (c)
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:13 [#51]:

у меня щас мозг вынесет=)
Think Different. (c)
Егор

Егор (статус: 10-ый класс), 19 апреля 2011, 21:17 [#52]:

Цитата (Кудя):

Тут я непонял, папка не может иметь расширение тхт

как это? папка может иметь любое расширение. не веришь? создай в проводнике новую папку. и расширение дай соответствующее.

RenameFile(SR.Name, 'НенужныйФайл.txt');
а минай уже задавал этот вопрос!
а если в папке будет несколько тхт-файлов? первый переименовать получится. остальные - нет. прога вывалится с сообщением об ошибке.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:18 [#53]:

у меня даже 1 неполучается переименовать, какой там все=)
Think Different. (c)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:19 [#54]:

Я же сказал: раздели задачу на подзадачи!
Мож мне проще написать тебе прогу, шоп ты успокоился?
Но только завтра, щас я хочу уже поиграть в покер да спать завалиться.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:21 [#55]:

а я спрашивал, как это делать
Think Different. (c)
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:23 [#56]:

Минай, я понимаю, что заколёбал тебя, НЕ надо писать программу для меня, часть - да, полностью - нет. Я не пойму её просто, а я веть потом собственные делать надо будет. поиск по компьютеру - обязательная часть многих программ.
Think Different. (c)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:26 [#57]:

Ну как хошь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 19 апреля 2011, 21:27 [#58]:

Цитата (Кудя):

у меня даже 1 неполучается переименовать, какой там все=)

у меня - переименовывает.
твой код, между прочим.
на диске С: в корне создай тхт-файл. он переименуется.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 19 апреля 2011, 21:28 [#59]:

и, кстати, папки тоже переименовываются :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Кудя

Кудя (статус: Посетитель), 19 апреля 2011, 21:30 [#60]:

program excersise204;
uses
  Classes, windows, SysUtils;
 
procedure DoIt(const Dir: string);
var
  SR: TSearchRec;
begin
  SetCurrentDir(Dir);
  FindFirst(Dir + '*.txt', faAnyFile, SR);
begin
        RenameFile(SR.Name, 'НенужныйФайл.txt');
        if (SR.Attr and faDirectory) <> 0 then
          DoIt(Dir + SR.Name + '\');
      end;
    until FindNext(SR) <> 0; // 'End' Excepted but 'Until' found
  FindClose(SR);
end;
begin
  DoIt('C:');
end.

ОШИБКА=(
Think Different. (c)

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [7] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 30 апреля 2026, 16:39
Выполнено за 0.03 сек.