2017-01-14 2 views
-1

vb.net을 사용하여 텍스트 파일을 읽고 일치하는 레코드가 있는지보고 해당 레코드를 선택하여 쓰기 뛰어나다.vb.net - r.peek()> = 0 line = r.readline()

그러나 peek 루프를 사용하면 파일이 끝날 때까지 파일을 읽습니다. 나는 2 peek loop를 가지고있다. - outer peek loop는 아이템을 찾는다. inner loop search는 그것을 찾는다.

peek 루프를 중지하고 외부 루프가 멈출 수 있습니까? 이것은 나의 코드 예제이다. 두 외부의 for 루프를 수행하여 외부 루프가 멈추는 위치에서 검색 루프를 계속 진행합니다. 감사합니다

For i = 1 To t_idex 

      rder.BaseStream.Seek(0, IO.SeekOrigin.Begin) 
      rder.DiscardBufferedData() 

      Do While rder.Peek() >= 0 
       line = rder.ReadLine() 
       r_idx += 1 
       st_outer += 1 

       m = Mid(line, 3, 7) 
       P = Mid(line, 19, 7) 
       b= Trim(Mid(line, 34, 14)) 

       If Len(b) = 14 Then 
        Do While rder.Peek() >= 0 
         line2 = rder.ReadLine() 

         m2 = Mid(line2, 3, 7) 
         P2 = Mid(line2, 19, 7) 
         b2 = Trim(Mid(line2, 34, 14)) 

         If b = b2 Then 
          cnt_dups += 1 

         End If 

         r_idx += 1 
        Loop 
       End If 
       i = st_outer 
      Loop 

     Next 
+0

당신이 더 나은 당신이 원하는 것을 설명 할 수를 달성하기 위해 이리? 뭔가를 찾는 코드는 어디에 있습니까? 내부 루프는 파일의 끝까지 읽을 contine, 당신이 뭔가를 찾으면 그 루프를 중지하는 조건이 없습니다. – Steve

+0

왜 이렇게 복잡합니까? 한 줄을 읽고, 원하는 줄인지, 길을 빠져 나왔는지, 파일 끝에 도달 할 때까지보십시오. – dbasnett

+0

@steve 코드를 업데이트했습니다. 바깥 쪽 루프는 b의 len이 14이고, 안쪽 루프로 들어가고, 바깥 쪽 루프가 b의 len을 찾는 곳에서 전체 파일을 반복하고, b가 b2에 일치하는 경우 두 레코드를 모두 씁니다 엑셀 (아직 코드를 업데이트하지 않음). 파일 끝까지이 작업을 수행하십시오. 그 시점 이후에 일어나는 일은 바깥 루프로 가서 중단 된 위치에서 멈추고 외부 루프가 eof로 완료 될 때까지 다음 검색을 수행하고 이상적으로 수행되어야 할 때 두 루프에서 모두 실행되고 완전히 종료된다는 것입니다. 당신이 무슨 뜻인지 알기를 바랍니다. – Johnseito

답변

1

....이 당신을 위해 무엇을

Dim Lines() As String = File.ReadAllLines("SomeTextFile.txt") 

For LineIndex = 0 To Lines.GetUpperBound(0) 
    Dim Match1 As String = Mid(Lines(LineIndex).Trim, 34, 14) 
    If Match1.Length = 14 Then 
     For Each RemainingLine As String In Lines.Skip(LineIndex + 1) 
      Dim Match2 As String = Mid(RemainingLine.Trim, 34, 14) 
      If Match1 = Match2 Then 
       ' We have a duplicate... 
       DoSomething() 

       ' Resume outer loop 
       ' Comment this line to find all duplicates 
       ' Uncomment this line to short-circuit exit upon finding 
       '  the first duplicate 
       Exit For 
      End If 
     Next 
    End If 
Next 

참고 문헌 참조 :

+0

코드 예제를 제공해 주셔서 감사합니다. 그것은 아름답게 보이고 내가 찾는 것입니다. 내가 바꾸었던 한가지는 exit 때문에 파일의 끝까지 코드가 검사하지 않는다는 것을 알았을 때 외부 변수에 stop 변수를 두어 멈추는 위치를 확인하고 거기에서 LineIndex를 계속하십시오. 그럼에도 불구하고 매우 유용한 코드 예제였습니다. – Johnseito

+0

좋아요, 저는 정확히 당신이 바뀌 었는지 궁금합니다. 저는 여러분의 의견을 몇 가지 방식으로 해석 할 수 있었고 여러분이 의미하는 바를 이해하고 싶습니다. – MrGadget

+0

Dim Line() 맨 아래에 Integer = 0으로 Dim stp_idx를 추가했습니다. Dim match1에서 LinIndex = 0에서 stp_idx + = 1을 match1 = match2, 나는 출구를 꺼냈다. 내부 루프의 다음 코드를 위해 LineIndex = stp_idx -1을 추가했다. 필자는 내부 루프가 파일 끝에 도달하여 첫 번째 일치 이후 다른 일치 항목을 찾은 경우를 대비하여 외부 루프가 중단 된 부분을 집어 들도록하기 위해이 작업을 수행했습니다. :) – Johnseito