HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
В этот день много лет назад...
28 марта. В 1991 году (33 года назад) - Учреждена Академия космонавтики им. К.Э.Циолковского.
 
 

Turbo Pascal Examples

Графика:
Построение графика функции
Прыгающий по экрану мячик.
Качание маятника.
Вложенные цветные круги.
Броуновское движение. Использование объектов.
Матрицы и массивы:
Сортировка элементов массива.
Удаление одинаковых элементов.
Простой пример на поворот матрицы.
Сортировка методом Шелла. +функции измерения временных интервалов.
Проверка выпуклости многоугольника.
Перемоножение матриц
Вычисление определителя матрицы. Рекурсия.
Нахождение обратной матрицы.
Задача об автостоянке.
Рекурсия. Подземелье сокровищ.
Численные методы:
Задачка на определение угла между стрелками часов.
Проверка на принадлежность точки многоугольнику.
Нахождение точки пересечения двух отрезков на плоскости.
Сортировка методом Шелла. +функции измерения временных интервалов.
Сортировка методом "пузырька". Пример на динамические структуры данных. Связанные списки.
Нахождение корня функции методом половинного деления.
Вычисление арккосинуса
Нахождение суммы цифр натурального числа.
Работа с фалами:
Рекурсивное сканирование директорий.
Работа со строками:
Работа со словами в предложении с разделителями.
Простейший синтаксический анализатор для распознавания и вычисления многчлена.
Синтаксический анализатор для распознавания и вычисления многчлена.
Работа со строками: смена кодировки, удаление тегов из HTML текста, обработка
Переименование файлов из кириллицы в латиницу.
Выдача контекстной подсказки.
Частотный словарь символов.
Подсчет повторяющихся символов в строке.
Ссылочные переменные:
Моделирование стека.
Пасьянс "Косынка".
Игры:
Пасьянс "Косынка".
Игра "Питон"
Игра "Анацефал". Пример использования объектов.
Игра "Минное поле"
Большие проекты:
Электронная картотека (без исходника)


 Пример пятый. Переименование файлов.

Представьте себе такую задачу. У вас есть куча файлов названных с использованием кириллических символов. Пока они лежат у вас на диске все в порядке, но вот если вам захочется их поместить в интернет или записать на CD-диск - тут придется их всех переименовывать и пользоваться только латиницей. Если файлов немного или они однотипны, то проблем не возникает, а если это, например, семейный фотоальбом и все фото названы по-русски? Ниже приведена программа, которая на входе получает список (list.txt) файлов названных с кириллицей, а на выходе генерит пакетный файл (list.bat), запуск которого из нужного каталога переименовывает все файлы уже с использованием только латиницы (см. Примечание 2). Входной файл list.txt может быть получен так: В нужной директории наберите команду "dir >list.txt", а затем отредактируйте полученный файл (см. Примечание 1), оставив в нем только длинные имена файлов (т.е. убрав все дополнительные сведения вроде размера и даты создания файла, выдаваемые командой dir). Понятно, что досовское приложение, откуда вы запустите эту команду, должно поддерживать длинные имена. Я использовал FAR manager.

Примечание 1. Команда "dir /b >list.txt" - выдает только имена файлов, без дополнительной информации - как раз то что нам и надо.

Примечание 2. Программа принимает один необязательный параметр: [-s|-S|/s|/S], который позволяет преобразовывать пробелы в именах файлов в знаки подчеркивания.

var s_r,s_e,s_r2,s_e2,s_r3,s_e3,s,d:string;
    f,g:text;
    k:byte absolute s;
    i:byte;
begin
{ Одному символу кириллицы соответствует один символ латиницы }
s_r:='АБВГДЕЗИЙКЛМНОПРСТУФХЦЪЫЬЭабвгдезийклмнопрстуфхцъыьэ';
s_e:='ABVGDEZIJKLMNOPRSTUFHC_Y_Eabvgdeziiklmnoprstufhc_y_e';
{ Одному символу кириллицы соответствует два символа латиницы }
s_r2:='ЁЖЧШЮЯёжчшюя';
s_e2:='YOZHCHSHYUYAyozhchshyuya';
{ Одному символу кириллицы соответствует 4 символа латиницы }
s_r3:='Щщ';
s_e3:='SHCHshch';
if (ParamCount>0) then
  begin
  s:=ParamStr(1);
  if (UpCase(s[2])='S') then { Заменяем пробелы на "_" }
    begin
    s_r:=s_r+' ';
    s_e:=s_e+'_';
    end;
  end;
assign(f,'list.txt');
reset(f);
assign(g,'list.bat');
rewrite(g);
while not eof(f) do
  begin
  readln(f,s); d:='';
  for i:=1 to k do
    if Pos(s[i],s_r)>0 then
      d:=d+s_e[Pos(s[i],s_r)]
    else if Pos(s[i],s_r2)>0 then
      d:=d+copy(s_e2,1+2*(Pos(s[i],s_r2)-1),2)
    else if Pos(s[i],s_r3)>0 then
      d:=d+copy(s_e3,1+4*(Pos(s[i],s_r3)-1),4)
    else d:=d+s[i];
  writeln(g,'ren "',s,'" "',d,'"');
  end;
close(f);
close(g);
end.

Текст программы вместе с примером файла list.txt можно взять здесь.

 

 

 

 

 

 

 


HOME