2016-11-25 20 views
0

文字列には文字列型、名前2倍、1ブール値があります。それを解析して助けてください。文字列から数値、ブール値、文字列を取得する

string type,name; 
bool isChocolate; 
double weight, price; 
string line = "Candy Red Riding Hood,0.17,2.21,true"; 
if (line.ToLower().Contains("candy")) 
{ 
    type = "candy"; 
    line = line.ToLower().Replace("candy", " ").Trim(); 
    if (line.ToLower().Contains("true")) 
    { 
     isChocolate = true; 
     line = line.ToLower().Replace("true", " ").Trim(); 
    } 
    else if(line.ToLower().Contains("false")) 
    { 
     line = line.ToLower().Replace("false", " ").Trim(); 
    } 
} 

それから私は立ち往生します。私にとっては、2倍のどれが価格になるのか、それとも重さになるのかは関係ありません。

+0

のように見えるのでしょうか? –

+0

私はこの 'var list = line.Split( '、');'を実行することから始め、その内容をループして、おそらくいくつかの構文解析を試みることができます。 –

答えて

4

string.Splitを使用できます。

string line = "Candy Red Riding Hood,0.17,2.21,true"; 

var parts = line.Split(','); 

string stringValue = parts[0]; 
double weight = double.Parse(parts[1], CultureInfo.InvariantCulture); 
double price = double.Parse(parts[2], CultureInfo.InvariantCulture); 
bool boolValue = Convert.ToBoolean(parts[3]); 
+0

これはOPが短くて甘いことを知りたかったものに正確に答えます。 – ColinM

+0

ジム、「私のために2つのダブルスのどれが天才かは関係ありません」という彼のコメントを削除しました!顧客が価格の代わりに重量を入れ、その逆の場合、なぜそれが気になるのですか? – wrath1888

+0

その文字列がキャンディのためのものであることを確認した後で、splitが最良の決定です。大変ありがとう – wrath1888

1

ラインのパターンがわかっている場合は、正規表現とその中のグループを定義できます。

https://regex101.com/r/kLphgk/1

とコードを使用すると、配列を作成する文字列分割を使用し、ちょうどいくつかのキャストを試す行うことができます。この

var rgx = new Regex(@"^(?<type>\w+)\s*(?<name>[^,]+),(?<weight>\d+(.\d+)?),(?<price>\d+(.\d+)?),(?<state>(true|false))$"); 
var match = rgx.Match("Candy Red Riding Hood,0.17,2.21,true"); 
var obj = new { 
    Type = match.Groups["type"].Value, 
    Name = match.Groups["name"].Value, 
    Price = double.Parse(match.Groups["price"].Value), 
    Weight = double.Parse(match.Groups["weight"].Value), 
    State = bool.Parse(match.Groups["state"].Value) 
}; 
+1

@Downvoter OKこの長い正規表現は使用しませんが、実際のコードをダウンロードする理由は何ですか?あなたがそれを理解できないのであれば? –

関連する問題