0

サーバーによって生成されたファイルがあります-このファイルの生成方法またはフォーマット方法を制御できません。各行が設定された長さの文字列(この場合は21個の数値文字)で始まることを確認する必要があります。行がその条件に一致しない場合は、前の行に結合し、ファイル全体を読み取って修正した後、保存する必要があります。ディレクトリ内の多くのファイルに対してこれを行っています。

これまでのところ:

       Dim rgx As New Regex("^[0-9]{21}$")

        Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))

        If linesList(0).Contains("BlackBerry Messenger") Then
            linesList.RemoveAt(0)
            For i As Integer = 0 To linesList.Count
                  If Not rgx.IsMatch(i.ToString) Then
                        linesList.Concat(linesList(i-1))
                 End If

            Next
        End If
        File.WriteAllLines(finfo.FullName, linesList.ToArray())[code]

そのコードブロックの前後に、ソースディレクトリ内のすべてのファイルをループするforステートメントがあります。これは正常に機能します。

これが読むのにそれほど悪くないことを願っています:/

4

1 に答える 1

0

私はあなたの解決策が良いとは思いませんでした、あなたは線を連結することに失敗していました。別のアプローチは次のとおりです。

Dim rgx As New Regex("^[0-9]{21}")
Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))

' We will create a new list to store the new lines data
Dim newLinesList As New List(Of String)()

If linesList(0).Contains("BlackBerry Messenger") Then
    Dim i As Integer = 1
    Dim newLine As String
    While i < linesList.Count
        newLine = linesList(i)
        i += 1

        ' Keep going until the "real" line is over
        While i < linesList.Count AndAlso Not rgx.IsMatch(linesList(i))
            newLine += linesList(i)
            i += 1
        End While

        newLinesList.Add(newLine)
    End While
End If

File.WriteAllLines(finfo.FullName, newLinesList.ToArray())
于 2013-01-01T22:45:07.447 に答える