Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Переименование файлов

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Artem90

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!Хочу переименовать файлы в назначенной директории (файл или папка) , может кто знает как это сделать полегче(в делфи).Заранее благодарен.

Всего записей: 63 | Зарегистр. 15-05-2004 | Отправлено: 21:26 02-07-2004
Felix



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код взят с первого попавшегося сайта по программированию
 

Код:
 
Рекурсивный проход дерева каталогов
 
 
procedure ScanDir(Dir: string);
var
  SearchRec: TSearchRec;
begin
  if Dir <> '' then
    if Dir[length(Dir)] <> '' then
      Dir := Dir + '';
 
  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.name = '.') or (SearchRec.name = '..') then
        continue;
 
      if (SearchRec.Attr and faDirectory) <> 0 then
        ScanDir(Dir + SearchRec.name)
          //we found Directory: "Dir+SearchRec.name"
      else
        Showmessage(Dir + SearchRec.name);
        сюды ставишь MoveFile
      //we found File: "Dir+SearchRec.name"
 
    until
      FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanDir('c:');
end;
 



----------
In My Opinion!

Всего записей: 965 | Зарегистр. 20-01-2002 | Отправлено: 18:21 03-07-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по поводу ренейма. Есть файлы (много), имена кириллицей писаные, необходимо перевести в лантицу. То есть "Д" -> "D" и т.д. Если у кого-нибудь готовый алгоритм или посоветуйте, как лучше сделать?

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 23:24 08-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
STEEL
Составь два массива символов один русских, второй транслита так чтобы соответсвующие элементы переводили соответсвующие символы. Потом для каждой русской буквы ищешь позицию в первом и берешь вместо нее букву с этой же позицией во втором. Вроде так Бред2 работает, в понедельник посмотрю его сорцы если не подойдет уточню. Да кстати, какой язык используешь?
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:54 09-10-2004
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt STEEL
Маловато будет просто символ на символ. Надо еще и сочетания символов учесть

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 09:02 09-10-2004
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Составь два массива символов один русских, второй транслита так чтобы соответсвующие элементы переводили соответсвующие символы.

По такому принципу работают большинство транслитераторов.
Artem90 Качнуть последнюю версию одного из лучших LetterZu можешь здесь. Там есть нужный letter_zu.tab
dneprcomp

Цитата:
Надо еще и сочетания символов учесть  
Точно. Там все учтено.
 


----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 13:16 09-10-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишу относительно недавно, учусь. На C, Pascal.
Есть два массива с русскими и англ символами. Далее... в переменной FileName у нас имя файла без расширения. Необходимо загнать имя файла тоже в массив? Что дальше? Делать цикл и пробегать по массиву, сравнивать их..
Может быть кто-нибудь покажет алгоритм хотя бы из бреда... ирцы где брать?

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 22:54 10-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Маловато будет  просто символ на символ. Надо еще и сочетания символов учесть

А я и не говорил, что символ на символ, иначе проще было бы смещение вычислять, а не запморачиваться с массивами

Цитата:
 Потом для каждой русской буквы ищешь позицию в первом и берешь вместо нее букву с этой же позицией во втором
Просто не совсем правильно выразился, не букву во втором, а букву или несколько букв , так как не для каждой русской буквы есть подходящая в англ.
 

Цитата:
 
const
    Tr:array [1..2,1..66] of string =(('А','A'),('Б','B')...('я','ya'));
 
function R2Tr(ch:char):string;
var
    i:integer;
begin
   Result:=0;
   for i:=1 to 66 do  
       if Tr[1,i]=ch then begin
         Result:=Tr[2,i];
         Exit;
       end;  
end;
 
function Replace(str:string):string;
var
   i:integer;
begin
  Result:='';
  for i:=1 to Length(str) do
    Result:=Result+R2Tr(str[i]);
end;
 
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:39 11-10-2004
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
А я и не говорил

А я и не сомневался Просто уточнил

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:41 11-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А я и не сомневался  Просто уточнил

Лады. Лучше уточнить, чем недосказать

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:59 11-10-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 Tr:array [1..2,1..66] of string =(('А','A'),('Б','B')...('я','ya'));

 
Человеки, может я дурак, но я забыл, как инициализировать массивы данным образом. Поискал в доках, не нашёл. Мне аж интересно стало, и так и сяк пробовал.
Приведите примерчик, заранее благодарен.

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 19:28 16-10-2004
CamTracer

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А в цитате у тебя что? Не инициализация?

Всего записей: 264 | Зарегистр. 07-07-2004 | Отправлено: 19:45 16-10-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CamTracer
Инициализация, инициализация! Только вот не полная. Я пытаюсь дописать(инициализировать до конца) и по всей видимости формат не тот.

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 01:19 17-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Инициализация, инициализация! Только вот не полная.

Там нужно аккурантно все буквы перечислить по парам, вернее для каждой русской буквы написать ее аналог в транслите, причем если буквы Й и Ё ты не юзаешь, то размерность массива надо уменьшить на 4, те вместо 66 написать 62 вроде бы.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:29 17-10-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
const
    Tr:array [1..2,1..2] of string =(('A','1'),('B','2'));
 
function R2Tr(ch:char):string;
var
    i:integer;
begin
{   Result:=0; }
   for i:=1 to 2 do
       if Tr[1,i]=ch then begin
         Result:=Tr[2,i];
         Exit;
         end;
end;
 
function Replace(str:string):string;
var
   i:integer;
begin
  Result:='';
  for i:=1 to Length(str) do
    Result:=Result+R2Tr(str[i]);
end;
 
begin
 
Writeln(Replace('AB'));
Readln;
 
end.
 

 
Для примера! Получаем BB. Также Result:=0 который мы инициализируем я закомментировал, т.к. Delphi кричит, что типы не совпадают integer и string;

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 11:34 17-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Также Result:=0 который мы инициализируем я закомментировал, т.к. Delphi кричит, что типы не совпадают integer и string;

Все правирльно она кричит, надо было писать Result:='0';

Цитата:
  for i:=1 to 2 do  
       if Tr[1,i]=ch then begin  
         Result:=Tr[2,i];  
         Exit;  
         end;

сделай так
if Tr[i,1]=ch then begin
         Result:=Tr[i,2];
 
Добавлено

Цитата:
Tr:array [1..2,1..66] of string =(('А','A'),('Б','B')...('я','ya'));

тут надо переставить местами размерность, то есть написать [1..66,1..2]

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:56 18-10-2004
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Объясните почему 2 (или 1 ) индекс 66 ?!!
В русском, на сколько я помню, букв в 2 раза меньше. Или я опять что-то напутал ?
 
P.S. Туплю - маленькие и большие буквы!

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 09:52 18-10-2004 | Исправлено: MoKC0DeR, 10:31 18-10-2004
xyepblra



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Джентльмены, а не подскажет ли кто-нибудь хорошую такую утилитку, чтобы без головняков произвести операцию по преобразованию 15000 файлов типа
 
folderA\subfolder\file.php@base=abc&query=[здесь варианты]&c=8&f=0&e=1
 
в
 
folderB\subfolder\[здесь варианты].html
 
?
 
Попробовал Renamer, но только вот что-то проблемы там то ли с лыжами, то ли асфальт не тот...
Вся инфа лежит на жёстком диске, и ждёт вашей помощи...

Всего записей: 78 | Зарегистр. 20-10-2004 | Отправлено: 10:25 21-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xyepblra
Поиск программ в программах, а здесь программирование. Если хочешь сам написать такую, то правильно сформулируй вопрос.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:30 22-10-2004
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoveFile(PAnsiChar(Dir+SearchRec.name),PAnsiChar(ConvDir+Rus2End(SearchRec.name)));
RenameFile(Dir+SearchRec.name,ConvDir+Rus2End(SearchRec.name));
 
Юзаю и одну и другую ф-ю, какая между ними разница, работают одинаково? Необходимо переименовывать файлы и в тоже время сохранять целостность первичного, RenameFile, MoveFile прибивает исходный.

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 00:46 10-09-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Переименование файлов


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru