2013-01-01 34 views
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] 

有一個之前和代碼塊循環遍歷源目錄,工作正常的所有文件後聲明。

希望這不是太糟糕閱讀:/

+1

你需要檢查每行_begins_與21位數字,但你錨你的正則表達式到最後 - 爲什麼? – fge

+0

不,那個「$」不應該在那裏......漫漫長夜!謝謝。其餘的仍然有點困難。 – user1171534

+0

在'rgx.IsMatch(i.ToString)'上,它不會匹配,因爲'i'是循環變量和'Integer'。我假設你的意思是'rgx.IsMatch(linesList(i))'? – rmobis

回答

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()) 
+1

夢幻般的答案,我確實看到我要去哪裏完全錯誤......謝謝! – user1171534