2012-03-24 30 views
2

私はこの* 000000、または* 110101のようなcomポート経由で文字列を受け取っています。各文字は私が持っているPCBのリレーの状態を表し、アスタリスクの後の最初の文字は最初のリレーを表します。それが1か0であるならば、それぞれの文字を別々にチェックし、それに応じてラベルをONまたはOFFに設定する必要があります。すべての6つの文字のラインの下のように文字列内の文字が1か0かを確認してください

if(char 1 == "1") 
{ 

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

と:

私のコードは次のようなものになるだろう。しかし、私はどのように各文字を分離するのか分からない。

ありがとうございます!

+0

string.substring(startpos、length)を使用して部分文字列を取得し、それに従って動作させます。 –

+0

インデックス作成はどういう意味ですか? 'string a =" 10 "; char one = a [0]; char 2 = a [1]; 'あなたの質問を理解することは難しく、1行目に構文エラーも含まれています。 – Gleno

+0

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

答えて

8

あなたは、単一のcharを抽出するためにindexer on Stringを使用するような音:

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"; 

これは、あなたが1」以外の値は、「OFF」に設定するラベルテキストの満足していることを前提としてい' (コメントで述べたように、あなたは文字列リテラルの二重引用符が、文字リテラルの単一引用符を使用します。)私は、コードを簡素化するために、ここで条件演算子を使用しましたか

注:あなたは基本的にしたい場合条件に基づいて2つの値(「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はOFFではなくONを意味する)に設定し、それ以外の場合は* OFFに設定しません。 –

1

文字列relaysStatus = "100110";
char c = relaysStatus.ElementAt(0);

か、ブールリストにすべてを変換することができます:

VARリレー= relaysStatus.Select(Q => Q == '1')ToListメソッド();。さらに移動

+0

2番目のアプローチは便利かもしれませんが、stringのインデクサーの代わりに 'ElementAt'を使用することは何のメリットもありません。 –

+0

はい確かに私も彼の質問だった、私は彼に最初に答えるべきで、より良い解決策を提案する –

+0

どこで質問にLINQを使用するように頼んだのですか?それは文字列内の1文字を取得するように求められました。インデクサー(たとえば、text [0])はそれを行うためのより良い方法です。より効率的で読みやすい。 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 
     }    
    } 
} 
関連する問題