2013-09-24 3 views
1
string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 
foreach (var part in ip2) 
{ 
    textBox3.Text = part[0].ToString(); 
    textBox4.Text = part[1].ToString(); 
    textBox5.Text = part[2].ToString(); 
    textBox6.Text = part[3].ToString(); 
} 

안녕 얘들 문자열의 각 파트를 배치 분할 할 수있는, 내 문제가 textBox3 그냥 내가이 기록을 위해 123 이 원하는대로에 1을 가지고 있다는 것입니다 방법 테스트 목적으로 ip = 123.456.789.101.내가 문자열 다음 텍스트 상자에

결과 : result입니다.

또한 textBox6을 설정할 때 충돌이 발생합니다 : 인덱스가 배열 경계를 벗어났습니다.

답변

1

귀하의 논리가 올바르지 않습니다.

foreach 루프의 모든 반복은 전체 문자열입니다. 따라서 이렇게하면 :

part[NUMBER_HERE] 

.. 그 문자열의 색인에서 하나의 문자에 액세스하고 있습니다.

내가 말한 것 때문에 IndexOutOfBounds 오류가 발생했습니다. 길이 3 (인덱스 0, 1 및 2) 인 문자열의 인덱스 3에있는 문자에 액세스하면 범위를 벗어납니다.

루프를 전혀 원하지 않습니다. 코드를 다음으로 변경하십시오.

string[] parts = ip.Split('.'); 
textBox3.Text = parts[0].ToString(); 
textBox4.Text = parts[1].ToString(); 
textBox5.Text = parts[2].ToString(); 
textBox6.Text = parts[3].ToString(); 

이제 색인 생성중인 실제 문자열 배열이 하나의 문자열이 아닙니다.

+0

감사을 많이합니다! 지금 일하고있어. – user2813126

1

루프를 foreach 루프에서 제거하십시오.

이 줄은 각 값이 새 슬롯에있는 배열을 만듭니다.

string[] ip2 = ip.Split('.'); 

그러나이 경우 배열의 모든 값이 필요하며 n 번째 슬롯에 액세스합니다.

foreach (var part in ip2){ 
    textBox3.Text = part[0].ToString(); 
    textBox4.Text = part[1].ToString(); 
    textBox5.Text = part[2].ToString(); 
    textBox6.Text = part[3].ToString(); 
} 

그것은 (인덱스에 의해 결정) 지정된 위치에있는 문자 데이터를 덮어 쓰기를 유지합니다. 마지막 입력 내용은 101이며, 텍스트 상자의 마지막 값은 1, 01입니다. 그냥 루프를 제거하면 괜찮습니다.

+0

고마워요! 지금 일하고있어. – user2813126

0

분할의 첫 번째 결과를 반복하기 때문입니다. 배열 ip2는 분할 결과를 포함합니다 (즉, ip2 [0] = "123"). 그러나 part[0]이라고 쓰고 파트에 첫 번째 결과가 포함되어 있기 때문에 part [0]은 이제 "123"의 첫 번째 문자 인 물론 "1"을 의미합니다.

string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 

textBox3.Text = ip2[0].ToString(); 
textBox4.Text = ip2[1].ToString(); 
textBox5.Text = ip2[2].ToString(); 
textBox6.Text = ip2[3].ToString(); 

은 이상적으로는 분리가 텍스트 상자에 할당하기 전에뿐만 아니라 충분한 결과를 반환하는지 확인해야합니다 : 여기에 당신이해야 할 일이다.

+0

고마워요! 지금 일하고있어. – user2813126

3

하자 수동으로 코드를 통해 추적 :

  1. ip2 배열 {"123", "456", "789", "101"}을 포함합니다.
  2. 당신은 다음 foreach 루프에서 배열에 반복되므로 part는 문자열 "123", "456" 차례로 "789", "101"의 각된다.
  3. 그런 다음 문자열 내에서 개별 char에 액세스하는 문자열 (대괄호 포함)에 대한 색인을 생성합니다. 그래서
    • part[0] 통하여 제 1 루프에서
    • part[2]
    • '3'이며
    • part[3]
    • 문자열 (길이 = 3)의 경계를 넘어,
    • part[1]
    • '2'이다 '1'이다.

ToString()를 호출하는 당신의 필요가 좋은 지표 뭔가 잘못도했다합니다.

대신 당신은합니다 (foreach 루프없이)

string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 
textBox3.Text = ip2[0]; 
textBox4.Text = ip2[1]; 
textBox5.Text = ip2[2]; 
textBox6.Text = ip2[3]; 
+0

고마워요! 지금 일하고있어. – user2813126

관련 문제