|
v7: Не пойму почему код не работает | ☑ | ||
---|---|---|---|---|
0
vova1122
24.06.13
✎
22:58
|
И так, мне нужно переименовать файлы в определенном каталоге по определенной схеме.
Названия файлов примерно такое: 01_456545456.Название1.txt 02_564654_53656Название2.txt 03_546(646454)._456_Название3.txt (два первых символа в названии это порядковый номер. Потом идет набор цыфр и символов которые нужно удалить из названия до первой встречающейся буквы) Функцию обнаружения и удаления цыфр в середине текста я вынес отдельно за основную процедуру Функция ВидалЧисла(имя) Если НомПерш1>1 тогда // из какой позиции удалять Префикс=Лев(имя,НомПерш1-1); иначе Префикс=""; КонецЕсли; имя=Сред(имя,НомПерш1); готово=0; Пока готово=0 цикл Если Найти("0123456789-_. ()",Лев(имя,1))>0 тогда имя=Сред(имя,2); Иначе готово=1; КонецЕсли; КонецЦикла; ИмяФнов=Префикс+имя; Возврат ИмяФнов; КонецФункции // дальше основная процедура Процедура Видалитичисла() Каталог=""; Если ФС.ВыбратьКаталог(Каталог, "Вибрати папку в якій переіменовувати файли")=1 Тогда КонецЕсли; Каталог=Каталог+"\"; имяф=СокрЛП(фс.НайтиПервыйФайл(Каталог+"*.*")); пока 1=1 цикл имяф=СокрЛП(фс.НайтиСледующийФайл()); Если имяф="" Тогда Прервать; КонецЕсли; Если (имяф=".") или (имяф="..") Тогда Продолжить; КонецЕсли; Если ЭтоКаталог(имяф)=1 тогда Продолжить; КонецЕсли; ИмяФнов=ВидалЧисла(имяФ); // вызываем функцию Фс.ПереименоватьФайл(имяф,ИмяФнов,1); Сообщить(ИмяФнов); КонецЦикла; КонецПроцедуры Но так не работает. Вернее Сообщить(ИмяФнов) сообщает верное (переименованное название файла. а сам файл остается таким как был. Когда я текст этой функции вставил в основное тело процедуры все отрабатывает как надо: Процедура Видалитичисла() Каталог=""; Если ФС.ВыбратьКаталог(Каталог, "Вибрати папку в якій переіменовувати файли")=1 Тогда КонецЕсли; Каталог=Каталог+"\"; имяф=СокрЛП(фс.НайтиПервыйФайл(Каталог+"*.*")); Пока 1=1 цикл имяф=СокрЛП(фс.НайтиСледующийФайл()); Если имяф="" Тогда Прервать; КонецЕсли; Если (имяф=".") или (имяф="..") Тогда Продолжить; КонецЕсли; Если ЭтоКаталог(имяф)=1 тогда Продолжить; КонецЕсли; имя=имяф; //вставляю текст той же функции в тело процедуры Если НомПерш1>1 тогда Префикс=Лев(имя,НомПерш1-1); иначе Префикс=""; КонецЕсли; имя=Сред(имя,НомПерш1); готово=0; Пока готово=0 цикл Если Найти("0123456789-_. ()",Лев(имя,1))>0 тогда имя=Сред(имя,2); Иначе готово=1; КонецЕсли; КонецЦикла; ИмяФнов=Префикс+имя; // конец вставленой функции Фс.ПереименоватьФайл(имяф,ИмяФнов,1); Сообщить(ИмяФнов); КонецЦикла; КонецПроцедуры Может кто-то объяснить такое поведение переименования? |
|||
1
zak555
24.06.13
✎
23:04
|
что есть Видал/Видали ?
|
|||
2
vova1122
24.06.13
✎
23:07
|
(1) Если перевести с украинского на русский то это означает "Удалить" - тоисть удалить из названия файла лишние символы
|
|||
3
zak555
24.06.13
✎
23:08
|
(2) значит проблема в украинской региональной настройке
|
|||
4
vova1122
24.06.13
✎
23:11
|
(3) какая может быть проблема в региональных настройках? Тот же код (дословно во втором примере) вставлен в основную процедуру. И он работает (файлы переименовываются...
|
|||
5
zak555
24.06.13
✎
23:20
|
1с не понимает мову
|
|||
6
vova1122
24.06.13
✎
23:21
|
(5) стёб неуместен...
|
|||
7
vova1122
24.06.13
✎
23:23
|
+(5) проверьте этот код у себя (если желаете, названия перепишите на русские)
|
|||
8
Nandarou
24.06.13
✎
23:31
|
Отладчик что говорит?
|
|||
9
vova1122
24.06.13
✎
23:33
|
(8) что он может сказать? в коде же прописал:
Сообщить(ИмяФнов); Имя верное. а в папке не переименовывается... |
|||
10
DES
24.06.13
✎
23:49
|
формат 8.3 мешает ?
|
|||
11
vova1122
24.06.13
✎
23:52
|
(10) ничего не понял? Во втором примере те-же файлы переименовываются, а в первом нет.
|
|||
12
Ёпрст
25.06.13
✎
00:00
|
(0) всё не смотрел, в Фс.ПереименоватьФайл
указывай полные имена файлов вместе каталогами,типа Фс.ПереименоватьФайл("D:\1.txt","c:\123.TXT") |
|||
13
Ёпрст
25.06.13
✎
00:01
|
или задавай явно текущий каталог.
|
|||
14
Ёпрст
25.06.13
✎
00:02
|
до того как
|
|||
15
vova1122
25.06.13
✎
00:03
|
(12) пробовал и так. Не помогло.
Но ведь во втором варианте все работает и без полного пути... |
|||
16
Ёпрст
25.06.13
✎
00:07
|
(15)
1.не верю 2.установлен тек каталог |
|||
17
Ёпрст
25.06.13
✎
00:08
|
да, если каталога не существует (в который переименовываем), то тоже ничего работать не будет.
|
|||
18
vova1122
25.06.13
✎
00:10
|
(17)каталог ведь устанавливается функцией ФС.НайтиПервыйФайл. после этого он никаким образом не меняется
(16) завтра на работе перепроверю еще 101-й раз. вдруг сработает.... |
|||
19
vova1122
25.06.13
✎
00:15
|
(17) в догонку. я привел два почти идентичных варианта кода. Первый не работает. а второй работает. немогу понять почему.....
|
|||
20
vova1122
25.06.13
✎
11:34
|
(16) (17) Разобрался почему не работает. Оказывается в моей функции которую я вызываю командой:
ИмяФнов=ВидалЧисла(имяФ); Название самой функции я прописал как: Функция ВидалЧисла(имя) и делал манипуляции в функции с переменной "имя". Поэтому в основной процедуре изменилось название файла который я хочу переименовать. Нужно было в названии функции добавить "знач" Функция ВидалЧисла(знач имя) |
|||
21
vova1122
25.06.13
✎
11:47
|
+(12) и всё работает без указания полного пути....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |