2

多数のファイルを含むフォルダーがあり、反復番号を含むパターンに基づいて名前が付けられています。

を通じて新しいファイルを保存しようとしていますvb.net。フォルダの番号が一番大きい+1の名前をつけるのが狙い目

インターネットで調べたところ、次のコードを作成するのに役立つ正規表現とLinqについて多くのことがわかりました。

If tmpFileName.Contains("%num%") Then
        Dim lastFileNo As Integer = 1
        Dim tmpFName = Dir(frmMain.saveLocalTFPath & "*.docx")
        Dim numbers() As Integer = Regex.Split(tmpFName, "(?<alpha>[\w-[0-9]]+)(?<num>[\d]+)").Skip(1).Select(Function(s) Integer.Parse(s)).ToArray
        For Each element In numbers
            If element > 0 And element < 999 And element > lastFileNo Then lastFileNo = element
        Next
        Do Until tmpFName = ""
            numbers = Regex.Split(tmpFName, "(?<alpha>[\w-[0-9]]+)(?<num>[\d]+)").Skip(1).Select(Function(s) Integer.Parse(s)).ToArray
            For Each element In numbers
                If element > 0 And element < 1000 And element > lastFileNo Then lastFileNo = element
            Next
            tmpFName = Dir()
        Loop
        tmpFileName = tmpFileName.Replace("%num%", lastFileNo)
    End If

しかし、期待どおりには機能しません。Linq と Regex の最初のコードであり、コードの何が問題なのかを検出するのに慣れていません。誰かヒントを教えてください。

ありがとう

4

3 に答える 3

1

それはいくつかの可能な解決策の1つになるでしょう。

 Dim di As New System.IO.DirectoryInfo("The Directory")
 Dim max = (From f In di.GetFiles().AsQueryable()
           Where IsNumeric(Path.GetFileNameWithoutExtension(f.Name))
           Select Path.GetFileNameWithoutExtension(f.FullName)).
           OrderBy(Function(c) c).LastOrDefault()
于 2013-07-19T13:59:08.200 に答える
0

はい the_lotus あなたは正しいですがmatches、私の場合は代わりにmatch. 30分前に発見しましたが、解決策を投稿する前に機能させたいと思っていました.

あなたのおかげで私は平和を組み立てることができました。これは正しいコードです:

Dim lastFileNo As Integer = 1
Dim files() As String = Directory.GetFiles(frmMain.saveLocalTFPath, "*.docx")

For Each file As String In files
    file = Path.GetFileNameWithoutExtension(file)
    Dim numbers As MatchCollection = Regex.Matches(file, "(?<num>[\d]+)")

    For Each number In numbers
        number = CInt(number.ToString())
        If number > 0 And number < 1000 And number > lastFileNo Then lastFileNo = number
    Next
Next
于 2013-07-19T17:14:59.633 に答える