|
Вопрос # 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|