2012-03-24 4 views
2

* 000000 또는 * 110101 또는 그 사이에있는 모든 문자가 포함 된 com 포트를 통해 문자열을 수신하고 있습니다. 각 문자는 내가 가지고있는 PCB의 릴레이의 상태를 나타내며, 별표가 첫 번째 릴레이를 나타내는 등등 첫 번째 문자가 나타납니다. 1 또는 0이면 각 문자를 seperatly 확인한 다음 그에 따라 ON 또는 OFF로 레이블을 설정해야합니다. 모든 6 자에 대한 선 아래로 등등문자열의 문자가 1 또는 0인지 확인하십시오.

if(char 1 == "1") 
{ 

    label4.Text = "ON";  
} 
else 
{ 
    label4.Text = "OFF"; 
} 

과 :

내 코드는 다음과 같이 될 것이다. 그러나 나는 각 성격을 어떻게 분리 할 지 모른다.

감사합니다. 당신이 추출하기 indexer on String를 사용하려면 같은

+0

string.substring (startpos, length)을 사용하여 부분 문자열을 얻고 그에 따라 작동하십시오. –

+0

색인 생성이란 무엇을 의미합니까? 'string a = "10"; char one = a [0]; char two = a [1];'1 번 구문 오류가 포함 된 질문을 이해하기가 어렵습니다. – Gleno

+0

char [] chArray = yourstring.ToCharArray(); .. – Flowerking

답변

8

는 소리 char 하나 :이 레이블 텍스트 1 '이외의 값을 "OFF"로 설정하는 당신이 행복했다고 가정

string text = "*110101"; // Wherever you get this from... 
label4.Text = text[1] == '1' ? "ON" : "OFF"; 
label5.Text = text[2] == '1' ? "ON" : "OFF"; 
label6.Text = text[3] == '1' ? "ON" : "OFF"; 
label7.Text = text[4] == '1' ? "ON" : "OFF"; 
label8.Text = text[5] == '1' ? "ON" : "OFF"; 
label9.Text = text[6] == '1' ? "ON" : "OFF"; 

'. (댓글에서 언급 한 바와 같이, 당신은 문자 리터럴 문자열을 리터럴 있지만, 작은 따옴표를 큰 따옴표를 사용합니다.) 내가 코드를 단순화하기 위해 여기에 조건 연산자를 사용했던 방법

참고 : 당신은 기본적으로 원하는 경우 조건에 따라 두 값 ("ON"및 "OFF") 중에서 선택하면 조건 연산자는 if/else보다 훨씬 간단합니다. 물론 과용하지 마십시오. 익숙해 질 가치가 있습니다.

그러나 관련 레이블을 컬렉션에 넣는 것이 좋습니다. 그러면 다음과 같이 사용할 수 있습니다.

for (int i = 0; i < 6; i++) 
{ 
    toggles[i].Text = text[i + 1] == '1' ? "ON" : "OFF"; 
} 
+3

OP, 문자열 대신 문자를 지정하려면 '1'을 중심으로 작은 따옴표를 적어 둡니다. – tomfanning

4

이미 문자열이 있습니까?

문자열 개체의 인덱서를 사용하여 문자에 액세스 할 수 있습니다.

예 :하여 특정 문자를 얻을 수 있습니다

string s = "110110"; 
if (s[3] == '0') label4.Text = "ON"; 
+1

다른 방법으로 설정하면 (1은 ON을 의미하고 OFF가 아님) 그렇지 않으면 OFF로 설정하지 않습니다. –

1

:

문자열 relaysStatus = "100110";
char c = relaysStatus.ElementAt (0);

하거나 부울 목록에 모든 변환 할 수 있습니다 :

VAR 릴레이 = relaysStatus.Select (Q => Q == '1') ToList();. 더 이동

+0

두 번째 접근법이 유용 할 수 있지만 문자열의 인덱서 대신 ElementAt를 사용하면 아무런 이점이 없습니다. –

+0

예 물론 나도 그게 그의 질문 이었어, 나는 그에게 먼저 대답해야하고 더 나은 해결책을 제안해야만한다. –

+0

어디에서 질문에 LINQ를 사용할 것을 요청 했습니까? 그것은 문자열의 단일 문자를 가져 오라고 요청했습니다. 인덱서 (예 : 텍스트 [0])는 IMO를 사용하는 더 좋은 방법입니다. 더 효율적이고 읽기 쉽습니다. ElementAt 사용의 이점은 무엇이라고 생각하십니까? –

1

, 당신은 온/오프 문자열로 문자를 변환하는 확장 메서드를 만들 수 있습니다

label1.Text = input[0].ToOnOff(); 
label2.Text = input[1].ToOnOff(); 

UPDATE : 그 후

public static class CharExtensions 
{ 
    public static string ToOnOff(this char ch) 
    { 
     return (ch == '1') ? "On" : "Off"; 
    } 
} 

을 당신은 그것을 (아주 깨끗한 코드)를 사용할 수 있습니다 : 나는 '0'과 '1'값을 모두 체크하는 것이 좋은 지적이라고 생각한다. 그러나 입력 문자열에 따라 다릅니다.

public static class CharExtensions 
{ 
    public static string ToOffOn(this char ch) 
    { 
     switch (ch) 
     { 
      case '0' : return "Off"; 
      case '1': return "On"; 
      default: 
       return ch.ToString(); // Or rise exception 
     }    
    } 
} 
관련 문제