Marc Kane Ответов: 2

Как автоматически переименовать имя файла в определенное значение?


У меня есть папка с деталями solidworks с именами A1, A2, A3, A4, A6, A10..... там. Я хочу найти там первое доступное имя в соответствии с первым доступным номером. В этом случае это будет А5. Каков наилучший способ сделать это в vb.net-да.

Что я уже пробовал:

Я нашел что-то похожее, но не знаю, как это реализовать в vb.net
href="https://stackoverflow.com/questions/8865768/determining-the-first-available-value-in-a-list-of-integers">

2 Ответов

Рейтинг:
2

Maciej Los

Предполагая, что имя файла всегда использует формат: "A{number}"... вы можете использовать Linq

Попробовать это:

'ucomment below 2 lines 
'Dim path As String = "full path here"
'Dim files As String() = Directory.GetFiles(path).Select(Function(x) New FileInfo(x).Name).ToArray()

''assuming that [files] variable stores:
Dim files As String() = {"A1", "A2", "A3", "A4", "A6", "A10"}
Dim maxNo = files.Select(Function(x) Convert.ToInt32(x.Replace("A", ""))).Max()
'maxNo - returns 10
Dim range = Enumerable.Range(1, maxNo)
'range - returns 1, 2, ... up to 10
Dim freeNo = range.Except(files.Select(Function(x) Convert.ToInt32(x.Replace("A", "")))).FirstOrDefault()
'FirstOrDefault method returns 5 from this set: {5, 7, 8, 9}  ;)


Рейтинг:
1

RickZeeland

Пример консольного приложения:

Imports System.Text.RegularExpressions

Module Module1
    Dim pos As Integer

    Sub Main()
        Dim test As String = "Test2020_123.txt"
        Dim i As Integer = Num(test)
        test = test.Remove(pos, i.ToString.Length).Insert(pos, (i + 1).ToString)
        Debug.Print(test)
    End Sub

    Private Function Num(ByVal value As String) As Integer
        Dim returnVal As String = String.Empty
        Dim collection As MatchCollection = Regex.Matches(value, "\d+")
        For Each m As Match In collection
            returnVal = m.ToString()
            pos = m.Index
        Next
        Return Convert.ToInt32(returnVal)
    End Function
End Module

Это также будет работать для таких имен файлов, как "Test2020_1.txt-поскольку увеличивается только последнее число.
Обратите внимание, что этот пример не является надежным, и вам придется добавить некоторые проверки для проверки.
Вы можете использовать цикл и продолжать увеличивать число, когда файл уже существует.