добрый день Может задача сложная, по крайне мере для меня и кажется очень сложной Есть файлы в папке пронумерованные, и есть файл или несколько файлов без номера, нужно эти файлы пронумеровать по порядку (которые не имеют цифры с точкой вначале файла) То есть порядок должен быть следующий после 4 номера в файле есть наработки
добрый день Может задача сложная, по крайне мере для меня и кажется очень сложной Есть файлы в папке пронумерованные, и есть файл или несколько файлов без номера, нужно эти файлы пронумеровать по порядку (которые не имеют цифры с точкой вначале файла) То есть порядок должен быть следующий после 4 номера в файле есть наработкиAsretyq
Pelena, да хотелось бы. Хотя бы увидеть какой нибудь вариант с разграничителем, к примеру ")", "-" и т.п. Или хотя бы вообще увидеть вариант любой.
Pelena, да хотелось бы. Хотя бы увидеть какой нибудь вариант с разграничителем, к примеру ")", "-" и т.п. Или хотя бы вообще увидеть вариант любой.Asretyq
Я имела в виду у пронумерованных файлов всегда после номера точка? Если всегда, то такой вариант. Если в папке файлов больше 100, цикл по i можно увеличить
Я имела в виду у пронумерованных файлов всегда после номера точка? Если всегда, то такой вариант. Если в папке файлов больше 100, цикл по i можно увеличитьPelena
Pelena, отлично, я уже начинал думать, что это не реально. К сожалению не до конца решена задача. Если имеется 2 не пронумерованных файла, то нумерация задается одинаковой
Pelena, отлично, я уже начинал думать, что это не реально. К сожалению не до конца решена задача. Если имеется 2 не пронумерованных файла, то нумерация задается одинаковойAsretyq
_Boroda_, Извиняюсь что не корректно выразился например в папке 5 файлов 1.rrr 2.yrr 3.dTr Fds Jhg После обработки должны называться 1.rrr 2.yrr 3.dTr 4.Fds 5.Jhg
_Boroda_, Извиняюсь что не корректно выразился например в папке 5 файлов 1.rrr 2.yrr 3.dTr Fds Jhg После обработки должны называться 1.rrr 2.yrr 3.dTr 4.Fds 5.JhgAsretyq
Писать код не буду, шибко лениво, но алгоритм такой Первым циклом определяем max в начале имени файла. Вторым циклом добавляем к имени файла max+1 (если имя файла начинается не с числа) При наличии файлов 1.a.jpg, 1.a.bmp, 1.a.xls алгоритм подлежит пересмотру.
PS забыл написать, что max, при применении, нужно увеличивать.
Писать код не буду, шибко лениво, но алгоритм такой Первым циклом определяем max в начале имени файла. Вторым циклом добавляем к имени файла max+1 (если имя файла начинается не с числа) При наличии файлов 1.a.jpg, 1.a.bmp, 1.a.xls алгоритм подлежит пересмотру.
PS забыл написать, что max, при применении, нужно увеличивать.RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Пятница, 19.10.2018, 22:13
Asretyq, Я спрашивал вообще-то про другое. Сравните свой пример и мой 1-2-3 понятно, а как быть, если 1-7-22? Или, с учетом замечания Андрея, 1-7-22-22-22?
Asretyq, Я спрашивал вообще-то про другое. Сравните свой пример и мой 1-2-3 понятно, а как быть, если 1-7-22? Или, с учетом замечания Андрея, 1-7-22-22-22?_Boroda_
Так я ж не у тебя спрашиваю. Как твой алгоритм предполагает - это я прекрасно понимаю. А вот как автору вопроса нужно? Может, нужно незанятые номера использовать 1.ффф 2.ааа 3.ппп 7.ыыы 22.ввв ? Или может так? 1.ффф 7.ыыы 22.ввв 22.иии 22.ггг 25.ааа 26.ппп
Или 7 переделать в 2, 22 переделать в 3, а необнумерованные пустить дальше - 4 и 5?
Так я ж не у тебя спрашиваю. Как твой алгоритм предполагает - это я прекрасно понимаю. А вот как автору вопроса нужно? Может, нужно незанятые номера использовать 1.ффф 2.ааа 3.ппп 7.ыыы 22.ввв ? Или может так? 1.ффф 7.ыыы 22.ввв 22.иии 22.ггг 25.ааа 26.ппп
Или 7 переделать в 2, 22 переделать в 3, а необнумерованные пустить дальше - 4 и 5?_Boroda_
_Boroda_, приведу пример с более разными названиями 1.rrr 2yrr 32.dTr Fds Jhg 25.ппп.txt 25.ппп.doxc
После обработки должны называться 1.rrr 2.2yrr 32.dTr 4.Fds 5.Jhg 25.ппп.txt 25.ппп.doxc
То есть если имеется цифра и после него точка - не меняется нумерация, даже если названия одинаковые, но расширение разное. Порядок нумерации появляется там где обрывается последовательность.
_Boroda_, приведу пример с более разными названиями 1.rrr 2yrr 32.dTr Fds Jhg 25.ппп.txt 25.ппп.doxc
После обработки должны называться 1.rrr 2.2yrr 32.dTr 4.Fds 5.Jhg 25.ппп.txt 25.ппп.doxc
То есть если имеется цифра и после него точка - не меняется нумерация, даже если названия одинаковые, но расширение разное. Порядок нумерации появляется там где обрывается последовательность.Asretyq
Sub iii() Dim Col As New Collection Dim Coln As New Collection put_ = ThisWorkbook.Path If Right(put_, 1) <> "\" Then put_ = put_ & "\" fn_ = Dir(put_) On Error Resume Next Do While fn_ <> "" If fn_ <> ActiveWorkbook.Name Then n_ = CInt(Left(fn_, InStr(Left(fn_, InStrRev(fn_, ".") - 1), ".") - 1)) If Err Then Err.Clear Col.Add fn_ 'коллекция названий без номеров Else Coln.Add n_ 'коллкция имеющихся номеров End If End If fn_ = Dir Loop With Coln 'сортировка номеров в коллекции For i = 1 To .Count - 1 For j = i + 1 To .Count If .Item(i) > .Item(j) Then aaa = .Item(j) .Remove j .Add aaa, , i End If Next j Next i z_ = 0 On Error GoTo A 'выход при нехватке файлов For i = 1 To .Count nom_ = .Item(i) If nom_ <> z_ + 1 Then For j = z_ + 1 To nom_ - 1 Name put_ & Col(1) As put_ & j & "." & Col(1) Col.Remove 1 Next j z_ = nom_ Else z_ = z_ + 1 End If Next i End With With Col 'оставшиеся файлы For i = 1 To .Count nom_ = nom_ + 1 Name put_ & Col(1) As put_ & nom_ & "." & Col(1) .Remove 1 Next i End With A: MsgBox "Файлы пронумерованы" End Sub
[/vba]
Тогда такой вариант [vba]
Код
Sub iii() Dim Col As New Collection Dim Coln As New Collection put_ = ThisWorkbook.Path If Right(put_, 1) <> "\" Then put_ = put_ & "\" fn_ = Dir(put_) On Error Resume Next Do While fn_ <> "" If fn_ <> ActiveWorkbook.Name Then n_ = CInt(Left(fn_, InStr(Left(fn_, InStrRev(fn_, ".") - 1), ".") - 1)) If Err Then Err.Clear Col.Add fn_ 'коллекция названий без номеров Else Coln.Add n_ 'коллкция имеющихся номеров End If End If fn_ = Dir Loop With Coln 'сортировка номеров в коллекции For i = 1 To .Count - 1 For j = i + 1 To .Count If .Item(i) > .Item(j) Then aaa = .Item(j) .Remove j .Add aaa, , i End If Next j Next i z_ = 0 On Error GoTo A 'выход при нехватке файлов For i = 1 To .Count nom_ = .Item(i) If nom_ <> z_ + 1 Then For j = z_ + 1 To nom_ - 1 Name put_ & Col(1) As put_ & j & "." & Col(1) Col.Remove 1 Next j z_ = nom_ Else z_ = z_ + 1 End If Next i End With With Col 'оставшиеся файлы For i = 1 To .Count nom_ = nom_ + 1 Name put_ & Col(1) As put_ & nom_ & "." & Col(1) .Remove 1 Next i End With A: MsgBox "Файлы пронумерованы" End Sub