Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2023, 11:31   #1
Alexandr Popov
 
Регистрация: 08.02.2009
Сообщений: 5
Хорошо Работа с файлами, содержащими символ "?"

Добрый день.
Столкнулся со следующей проблемой. Буду признателен за помощь в решении, т.к. после 2-х дневного поиска в Интрнет и ChatGPT ответа не нашёл.
Есть макрос, который среди прочего осуществляет коирование фалов из одной папки в другую.
Перенос осуществляется командой Call FileCopy("C:\1\й.pdf", "C:\2\й.pdf").
Всё работает до тех по, пока не встречается особенный файл.
Пример: "й.pdf". Здесь символ "й" записан как "и?".
То есть, если скопировать имя этого файла в ячейку Excel и разложить его по кодам символов, то получится, что имя записано так:
знак символ код символа знак символа
1 и 232 и
2 ̆ 63 ?
3 . 46 .
4 p 112 p
5 d 100 d
6 f 102 f
При переборе файлов в папке функцией Dir при нахождении такого файла возвращаеся имя "и?.pdf".
Функция Call FileCopy("C:\1\й.pdf", "C:\2\й.pdf") или Call FileCopy("C:\1\и?.pdf", "C:\2\й.pdf"). Выдают ошибку - файл не найден (bad file name or number).
Каким образом в VBA работать с таким фалом (копировать, переносить, удалять, переименовывать)?
Alexandr Popov вне форума Ответить с цитированием
Старый 11.05.2023, 13:45   #2
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
Сообщение

Кто-то пошутил. У вас не "й" (и краткое), а "и" с диакритическим знаком "Кра́тка".

Например впереди два одинаковых текста, но по-разному отображаются в разных местах:

й ≠ й ≠ и̃
и̃я креве́дка, йо́жик, Ей огу́рец не́ нра́вится.
Код:
й ≠ й ≠ и̃
и̃я креве́дка, йо́жик, Ей огу́рец не́ нра́вится.



Цитата:
Не понятно... Он (респондент) и вправду считает, что переименовать файл в ручную оригинальное решение до которого человек, задавший вопрос, не мог додуматься сам

... после 2-х дневного поиска в Интрнет и ChatGPT ответа не нашёл....
Видимо, респондент умнее и грамотнее вас. Пятнадцать лет на форуме, несколько дней гуглёжа, совместно с самым передовым ИИ, плюс прямой ответ не дал вам умозаключений на проблему букв нелатиницы в именах файлов, которая решена как пару десятилетий? Зато жалобу кинуть ума хватило.
Эх, эволюция, бессердечная ты сука! © Шелдон, ТБЗ.
Первая же ссылка на проблему в гугле говорит зачем желательно не использовать Dir.

Ответ:
  • Переименуйте такие файлы вручную в проводнике или другом любимом менеджере файлов без спец.символов. (того что вы не осилили и назвали заумными словами)
  • Используйте только латиницу
  • Используйте FileSystemObject

Последний раз редактировалось jillitil; 11.05.2023 в 16:09.
jillitil вне форума Ответить с цитированием
Старый 11.05.2023, 17:04   #3
Alexandr Popov
 
Регистрация: 08.02.2009
Сообщений: 5
По умолчанию

jillitil, Разумеется, жалобу кинул. Потому что Ваш ответ - это умничание и ничего более. И ворой ответ - то же. Если всё так просто - ответьте по-нормальному. Если не заете ответ - для чего засорять чат? Вдруг найдутся действительно компетентные люди. Переменовать файлы в ручную - не вариант (иначе бы не писал вопрос). Файлы формирую не я, их формирует сторонняя программа.

Никогда не понимал таких людей. Ничего по сути не говорят, зато пишут с умным видом текст, корый всячески подчёркивает некомпетентость автора и глубочайший интеллект отвечающего.

И да, не знаю я ответа на этот вопрос. И признаю это, задавая этот вопос. Педполагаю, что у всех разная специализация - всего знать невозможно. А вы, веротяно, увидев это решили постебаться над автором вопроса. Ну что же, успехов в самоутверждении.

Последний раз редактировалось Alexandr Popov; 11.05.2023 в 17:16.
Alexandr Popov вне форума Ответить с цитированием
Старый 11.05.2023, 22:53   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Попробуйте посмотреть на имя вашего файла иначе:
1. Поместите такой файл и ещё какой либо в папку, например C:\abc
2. Напишите скрипт в Блокноте:
Код:
@ echo off
chcp 1251
for %%m in (c:\abc\*.*) do (
   echo  %%m
)
и дайте ему имя, например, a.cmd и сохраните в папке C:\abc

3. Запустите скрипт в командной строке
Запуск Командной строки, например: Win+R --> cmd --> Ok
Перейти в папку:
Код:
> cd c:\abc
Запуск скрипта:
Код:
> a.cmd
4. И какой результат?

PS:
1. Не набирайте символ '>' - это из строки-приглашения командной строки.

2. Скрипт набирайте в Блокноте и сохраняйте в кодировке ANSI
Сохранить как ... --> Выбрать кодировку ANSI (поле "Кодировка" в нижней части формы)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 12.05.2023, 07:58   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Alexandr Popov Посмотреть сообщение
и ChatGPT ответа не нашёл.
даладна! дабытьтакованиможит! o_O шок шок
Алексей1153 вне форума Ответить с цитированием
Старый 12.05.2023, 09:32   #6
Fck_This
Пользователь
 
Регистрация: 10.11.2016
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Alexandr Popov Посмотреть сообщение
особенный файл.
Сам файл будет или нет? Если вы знаете имя и символы варьирующиеся, то попробуйте предусмотреть варианты, составить имя по номерам символов (не знаю, как там в эксель раскладываются тексты на символы, но в VBA через ChrW лучше): Если в папке есть файл, к примеру, ChrW(1080) & ChrW(774) & ".pdf", то копировать его, если есть ChrW(1081) & ".pdf" - то этот, если ChrW(1080) & ChrW(771) & ".pdf" - соответственно. Это номера символов, приведённые пользователем jillitil. Какой у вас точно сказать нельзя, скорее всего проблема в разности кодировки программы подающей вам файлы.
Fck_This вне форума Ответить с цитированием
Старый 12.05.2023, 11:20   #7
Alexandr Popov
 
Регистрация: 08.02.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Fck_This Посмотреть сообщение
Сам файл будет или нет? Если вы знаете имя и символы варьирующиеся, то попробуйте предусмотреть варианты, составить имя по номерам символов (не знаю, как там в эксель раскладываются тексты на символы, но в VBA через ChrW лучше): Если в папке есть файл, к примеру, ChrW(1080) & ChrW(774) & ".pdf", то копировать его, если есть ChrW(1081) & ".pdf" - то этот, если ChrW(1080) & ChrW(771) & ".pdf" - соответственно. Это номера символов, приведённые пользователем jillitil. Какой у вас точно сказать нельзя, скорее всего проблема в разности кодировки программы подающей вам файлы.
Спасибо Вам огромное. Чётко, по делу и без стёба. Вы настоящий профи!!!
Помогло следующее (файлик находится в папке C:\1\):

Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemO bject")
fso.CopyFile "C:\1\и" & ChrW(774) & ".pdf", "C:\1\new"

Последний раз редактировалось Alexandr Popov; 12.05.2023 в 11:50.
Alexandr Popov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20