Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22

Изменение недопустимого имени файла

08.09.2020, 20:32. Показов 1006. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При работе со сторонней БД возникло желание сохранять файлы, имеющие не очевидные имена, в осмысленном виде. Т.е. заменить на имя, взятое из поля БД, содержащее название. В этом поле некоторые названия содержат недопустимые символы.
Перепробовал несколько вариантов. Удобным оказалось выводить форму с текстовым полем для редактирования. Нигде не смог найти каким образом ожидать события Command_Click() выводимой формы. Удалось побороть через дополнительную переменную, типа Boolean
Вложения
Тип файла: zip Extract.zip (2.7 Кб, 3 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2020, 20:32
Ответы с готовыми решениями:

Изменение имени файла в зависимости от значений ячейки
Здравствуйте, Проблемы в следующем: Необходимо менять имя файла при сохранении, в зависимости от значений в ячейке А1. Пробую вот так ...

Изменение гиперссылки, имени файла и папки размещения
Доброго дня, вопрос сначала поднимал в старой теме, но отклик получил от одного человека (Спасибо ему за это), думаю может не по теме...

Пользовательское изменение имени файла, для копировании в него данных
Всем доброго времени суток, в VBA я уже 10 дней и вот хотел узнать как прописать код что бы пользователь сам выбирал имя файла в какой...

13
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
08.09.2020, 22:31
Я бы написал простенькую функцию - валидатор имен. Изменение имени в автоматическом режиме, замена плохих символов на знак подчеркивания. Все остальные проверки выкинул.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Option Explicit
Function FileNameValidater(FileName As String) As String
    Dim BadCharacters As String, i As Integer
    BadCharacters = "\/:*?<>|" + Chr(34) ' Список плохих символов можно дополнить
    FileName = Trim(FileName)
     For i = 1 To Len(BadCharacters)
            FileName = Replace(FileName, Mid(BadCharacters, i, 1), "_")
     Next
    FileNameValidater = FileName
End Function
 
Private Sub Command1_Click()
    Dim FileNum As Integer
    FileName = FileNameValidater(Text1.Text)
    PathFile = App.Path & "\" & FileName & ".txt"
    FileNum = FreeFile                         'Получаем следующий свободный номер файла.
    Open PathFile For Output As FileNum        'Открываем файл для записи
    Close FileNum
    Text1.Text = FileName
End Sub
 
Private Sub Command2_Click()
    End
End Sub
 
Private Sub Command3_Click()
    Kill (PathFile)
End Sub
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
09.09.2020, 05:15  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я бы написал простенькую функцию - валидатор имен.
У меня подобная функция, но более примитивная:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function Replacesym(Strin As String) As String
Dim Strout As String
Dim Sim As String
     Strout = Replace(Strin, "/", "_", , , vbBinaryCompare)
      Strout = Replace(Strout, "\", "_")
       Strout = Replace(Strout, "<", "_")
        Strout = Replace(Strout, ">", "_")
         Strout = Replace(Strout, ".", "_")
          Strout = Replace(Strout, "?", "_")
           Strout = Replace(Strout, ":", "_")
            Strout = Replace(Strout, "|", "_")
             Strout = Replace(Strout, "*", "_")
               Strout = Replace(Strout, ";", "_")
                Sim = Chr(34)
                  Strout = Replace(Strout, Sim, "_")
    Replacesym = Strout
End Function
почему-то пропускает знак вопроса.

Добавлено через 7 минут
К сожалению, функция Input не позволяет предварительной записи в поле ввода. Поэтому, пришлось городить огород с дополнительной формой для редактирования.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.09.2020, 05:18
Цитата Сообщение от Argus19 Посмотреть сообщение
почему-то пропускает знак вопроса.
У меня то не пропускает
Можно попробовать vbBinaryCompare поменять на vbTextCompare.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
09.09.2020, 18:27  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Можно попробовать vbBinaryCompare поменять на vbTextCompare.
Что-то не нашёл, какой вариант Compare используется по умолчанию?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.09.2020, 20:36
Цитата Сообщение от Argus19 Посмотреть сообщение
какой вариант Compare используется по умолчанию?
Судя по значению vbBinaryCompare = 0, то значит оно и есть по умолчанию.
vbTextCompare = 1
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
09.09.2020, 21:02
Так короче и легче добавлять плохие символы:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function Replacesym(Strin As String,Optional Bad as String="/\><.?:|*;") As String
Dim Strout As String
     Strout=""
     for i%=1 to len(Strin)
         a$=mid$(Strin,i%,1)
         if Instr(Bad,a$)<>0 or a$=chr$(34) then a$="_"
         Strout=Strout+a$
     next i% 
     Replacesym = Strout
End Function
1
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
10.09.2020, 11:13
Тоже приходится работать с именами файлов.
Пришел к выводу, что при замене всех символов на один, например, "_" не всегда можно вернуть первоначальное значение, например, запись покупного изделия в конструкторской документации. Оказалось, что некоторые фирмы используют для записи компонента "_". И понять потом из имени файла 3D-модели, что было в начале "/" или "_" не представляется возможным.
Перешел в некоторых случаях на замену "нефайловых" символов прямо на слова:
: -> COLON
; -> SEMOCOLON
/ -> SLASH
и так далее. При считывании проверяю наличие слов и преобразую их в соответствующие символы в записях.
Еще подумываю вместо "/" использовать "!".
Это конкретика, возможно, специфика, на всеобщий характер не претендую. ))

Добавлено через 58 минут
; -> SEMICOLON
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.09.2020, 11:58
PathCleanupSpec
2
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
11.09.2020, 21:55  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
У меня то не пропускает
Использовал вашу функцию вместо своей. Один файл всё-таки стабильно пропускало.
Видимо, где-то в программе-потрошителе БД я где-то что-то упустил. Она ещё пропустила много файлов, имеющих zip-ы, хотя была не должна:

https://drive.google.com/file/... sp=sharing
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
12.09.2020, 06:55
Цитата Сообщение от Argus19 Посмотреть сообщение
Один файл всё-таки стабильно пропускало.
По сути программа не может что то "пропустить" если условия совпадают.
Скорее всего там "плохой символ" был внешне похож на записанный в условие, но таковым не являлся.
Это как кириллическая и латинские "o" и "о". Возможно и у символов в различных кодировках есть двойники.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
12.09.2020, 08:22  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Возможно и у символов в различных кодировках есть двойники.
Пропускала знак вопроса. Проверял и в ASCII и в ANSI = (63).
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
12.09.2020, 18:08
Цитата Сообщение от Argus19 Посмотреть сообщение
Пропускала знак вопроса.
Знаком вопроса обычно заменяется символ, который не может быть отображён.
Т.е. это ваш комп отобразил знак вопроса. А что там в реальности записано в Базе данных, прямо на уровне НЕХ?
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
12.09.2020, 19:07  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А что там в реальности записано в Базе данных, прямо на уровне НЕХ?
Вот. Я и не догадался посмотреть:
Easy £lî†ë Text!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2020, 19:07
Помогаю со студенческими работами здесь

Изменение имени файла
Подскажите код который бы изменял у файла &quot;й&quot; на &quot;и&quot;, я нашел такую конструкцию в интрнете, но мб кто то уже пользовался чем то подобным? ...

Изменение имени файла
здравствуйте уважаемые форумчане! подскажите кто в курсе... заранее благодарю!!!!!! как добавить подстроку в середину имени файла? ...

Изменение имени файла
У меня написан скрипт: #!/bin/bash echo &quot;$1&quot; echo &quot;$2&quot; echo &quot;$3&quot; if ; then find / -type f -name &quot;$1&quot; &gt; &quot;$2&quot; -exec stat {} \; ...

Изменение имени файла
Здравствуйте, private void Form1_Load(object sender, EventArgs e) { string path =...

Изменение расширения файла/имени
Всем добрый день! Интересно есть ли способ изменить расширение/имя файла без перезаписи файла?Т.е. не таким способом :File.Move(filePath,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru