1

午後、

VB.net の以下の関数を調整して、配列内のファイル名の 2 番目の部分の最初の 8 文字を取得するにはどうすればよいですか?

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length = 3 Then
        Dim dt As DateTime
        If DateTime.TryParseExact(parts(1), "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function

ファイル名が3つの部分に分割されるため、以前はこの関数を使用していたので、これは私にとって完璧に機能しました。ファイル名は以前は以下のようでした:

542656-20130402-FTO Disclosure.pdf
548872-20120501-Funds a.pdf
848581-20110215-Alpha.pdf

問題は、ファイル名の構造が変更され、次のように 2 つの部分に分かれることです。

542656-20130402.pdf
548872-20120501.pdf
848581-20110215 Alpha.pdf
652162-20120711 a.pdf

では、上記の関数を調整してファイル名を「-」で分割するにはどうすればよいでしょうか。ただし、日付を正確に解析しようとする代わりに、2 番目の部分 (日付) の最初の 8 文字だけを調べます。残りのコードと同じように続行しますか?

親切なアドバイス。あ

4

1 に答える 1

2

分割通話と長さチェックを次のように変更した場合:

Dim parts() As String = fileName.Split("-"c, "."c, " "c)
If parts.Length > 2 Then

その後、既存のコードは両方のバージョンで正しく動作するはずです。


コメントに応じて編集:

「12764-20120124b.pdf」のようなファイルでこれを機能させるには、部分文字列を直接抽出する必要があります。

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length > 1 AndAlso parts(1).Length >= 8 Then
        Dim dt As DateTime
        Dim dtStr = parts(1).Substring(0, 8)
        If DateTime.TryParseExact(dtStr, "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function
于 2013-07-09T23:01:14.440 に答える