Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли исправить имя файла?

248
19 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Вот такая необычная задачка. В директории сидят файлы *.doc и *.bmp (количество может быть от 3 до 15). Вот в файлах *.bmp иногда встречаются русские заглавные буквы "Т" и "У". Если файл с такими буквами в названии я пытаюсь вставить в верстку (при помощи скрипта), то программа пишет, что "файл не найден, проверьте пути". Правда, если вставлять такой файл через стандартное окно выбора файлов, то проблемы не возникает. Но так, так я это как правило делаю "не руками", то такая остановка оч. нежелательна. И вот возникло дикое желание как-то "автоменять" буквы в таких файлах (если встречаются), например на английские эквиваленты (чтобы не сильно портить название, хотя это не принципиально, т.к. данные файлы нужны будут только мне). Причем, ессно, надо не каждый файл подвергать такой замене, а сразу все bmp-шки не разбирая, скопом (в данной директории), чтобы не ломать глаза, просматривая и вычитывая их имена, а делать это автоматически - "если есть буква, ее заменить".
Нельзя ли подсказать, хотя бы алгоритм, или намек на алгоритм, чтобы как -то подойти к такой задачке? И какие команды для такой цели могут быть доступны в среде VBA(VB) (типа rename, dir или что-нить в таком роде)?

Спасибо.
P.S. Ответ "соображай сам" тоже принимается :(
2.1K
20 сентября 2007 года
Tever
87 / / 05.08.2003
Да, вот пример.
Удачи!
248
20 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: Tever
Да, вот пример.
Удачи!



Спасибо. Сейчас будем разбирать "по косточкам". Что там делается...
:)

248
20 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
В Private Sub Command1_Click() в строке:
[COLOR="Green"]nameNew = nameNew & IIf(Asc(Mid(nameOLD, ii, 1)) > 127, "1", Mid(nameOLD, ii, 1))[/COLOR]
можно ли задать диапазон asc'ов (вроде это надо именно здесь указать), чтобы менялись только символы с номерами с 210 по 223 (т.е. заглавные буквы с "Т" по "Я")?
А пока все символы превращаются в единички.
Узнал почему. Большинство русских символов имеет значение больше 210. Поэтому хорошо бы задать диапазон.

Спасибо.
248
20 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Выкрутился вот так:
Код:
Private Sub Command1_Click()
Dim nameOLD, nameNew As String
File1.Path = Text1.Text
File1.Pattern = "*.bmp"
For i = 0 To File1.ListCount - 1
nameOLD = Left(File1.List(i), InStr(1, File1.List(i), ".bmp") - 1)
nameNew = ""
For ii = 1 To Len(nameOLD) 'перебираем буквы названия
myletter = Mid(nameOLD, ii, 1)
If Asc(myletter) < 222 And Asc(myletter) > 209 Then
myletter = 1
End If
nameNew = nameNew & myletter
Next
'MsgBox nameNew
Name File1.Path & "\" & nameOLD & ".bmp" As File1.Path & "\" & nameNew1 & ".bmp"
Next
End Sub
2.1K
21 сентября 2007 года
Tever
87 / / 05.08.2003
В одну строчку элегантнее и чуть быстрее работает :) . Вот так:
 
Код:
nameNew = nameNew & IIf(Asc(Mid(nameOLD, ii, 1)) >209 And Asc(Mid(nameOLD, ii, 1)) < 222, "1", Mid(nameOLD, ii, 1))
248
22 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: Tever
В одну строчку элегантнее и чуть быстрее работает :) . Вот так:
 
Код:
nameNew = nameNew & IIf(Asc(Mid(nameOLD, ii, 1)) >209 And Asc(Mid(nameOLD, ii, 1)) < 222, "1", Mid(nameOLD, ii, 1))



Да, да, что-то именно такое я и предполагал. А в разных строках по кускам собирать переменные - это несолидно. Может со временем начну лучше соображать :o .

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог