2011-05-01 3 views
0

나는 10 행의 이름 공간 마지막 이름 공간 우편 번호 배열이 있습니다. 모든 우편 번호는 다른 번호로 시작됩니다. 그 대신 아래 숫자의 # 1을 대체하여 숫자 문자를 검색 할 수 있습니까?VB.net 배열 검색에 대한 질문

'open file 
    inFile = IO.File.OpenText("Names.txt") 

    'process the loop instruct until end of file 
    intSubscript = 0 
    Do Until inFile.Peek = -1 OrElse intSubscript = strLine.Length 

     strLine(intSubscript) = inFile.ReadLine 
     intSubscript = intSubscript + 1 
    Loop 

    inFile.Close() 

    intSubscript = 0 
    strFound = "N" 

    Do Until strFound = "Y" OrElse intSubscript = strLine.Length 
     intIndex = strLine(intSubscript).IndexOf("1") 
     strName = strLine(intSubscript).Substring(0, intIndex - 1) 
     If strName = strFullname Then 
      strFound = "Y" 
      strZip = strLine(intSubscript).Substring(strLine(intSubscript).Length - 5, 5) 
      txtZip.Text = strZip 
     End If 
    Loop 

End Sub 
+1

'strFound' 대신'Boolean'을 사용해야합니다. – SLaks

답변

1

regular expression을 사용하십시오.

정규 표현식을 사용하면 텍스트에 패턴 일치를 적용 할 수 있습니다. 와일드 카드를 지원하는 String.IndexOf()와 같습니다. 예를 들어

은 소스 데이터는 다음과 같습니다 가정 :

James Harvey 10939 
Madison Whittaker 33893 
George Keitel 22982 

... 등등.

the beginning of the string, followed by 
a sequence of 1 or more alphabetic characters, followed by 
a sequence of one or more spaces, followed by 
a sequence of 1 or more alphabetic characters, followed by 
a sequence of one or more spaces, followed by 
a sequence of 5 numeric digits, followed by 
the end of the string 

당신은 매우 정밀 것을 표현할 수와 succintly 정규식에서이 방법 :

^([A-Za-z]+) +([A-Za-z]+) +([0-9]{5})$ 

는 VB에서이 방법을 적용해야 영어로 표현

, 각 라인은 다음 패턴은 이것이다 :

Dim sourcedata As String = _ 
     "James Harvey 10939" & _ 
     vbcrlf & _ 
     "Madison Whittaker 33893" & _ 
     vbcrlf & _ 
     "George Keitel 22982" 

    Dim regex = "^([A-Za-z]+) +([A-Za-z]+) +([0-9]{5})$" 

    Dim re = New Regex(regex) 

    Dim lineData As String() = sourceData.Split(vbcrlf.ToCharArray(), _ 
               StringSplitOptions.RemoveEmptyEntries) 

    For i As Integer = 0 To lineData.Length -1 
     System.Console.WriteLine("'{0}'", lineData(i)) 
     Dim matchResult As Match = re.Match(lineData(i)) 
     System.Console.WriteLine(" zip: {0}", matchResult.Groups(3).ToString()) 
    Next i 

컴파일이 코드를 얻으려면, 당신은 System.Text.RegularExpressions 남를 가져와야합니다 VB 모듈 상단에있는 espace를 사용하여 RegexMatch 유형을 얻습니다.

입력 데이터가 다른 패턴을 따르는 경우 정규식을 조정해야합니다. 예를 들어, "Chris McElvoy III 29828"이 될 수 있다면 그에 따라 정규 표현식을 조정하여 이름 접미사를 처리해야합니다.