2013-01-01 4 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] 

가 있습니다 전 (before)과 잘 작동 소스 디렉토리에있는 모든 파일을 통해 루프에 그 코드 블록 후 문. 이 나쁘지 않네요

희망은 읽기/

+1

각 줄이 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