2012-07-26 18 views
5

私はC#での名前と値のペアの次の文字列を解析するにはどうすればよい:名前と値のペアで文字列を解析

string studentDetail = "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith" 

この配列を解析する目的は、LINQ to SQLのを使用してDBに値を挿入することです。

[HttpPost()] 
    public ActionResult SaveStudent(string studentDetail) 
    { 
     DataContext db = new DataContext();   

       Student student = new Student(); 
       { 
        student.StudentID = //StudentID 
        student.FirstName = //FirstName 
        student.LastName = //LastName 

       }; 

       db.Student.InsertOnSubmit(student); 
       db.SubmitChanges(); 

      return View(); 
    } 

これに最も近い方法は何ですか。

+2

[] – BlackBear

+0

@BlackBearはまだ単なる文字列ではなく、[] – user793468

+0

を更新 – hatchet

答えて

31

カンマで区切ってから、等号で区切ることができます。私は簡単にアクセスできるようにデータを辞書に入れました。

string input = "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"; 

Dictionary<string,string> keyValuePairs = input.Split(',') 
    .Select(value => value.Split('=')) 
    .ToDictionary(pair => pair[0], pair => pair[1]); 

string studentId = keyValuePairs["StudentId"]; 

個々の生徒のレコードが区切られていないので、これはなど、

+1

今回、私はToDictionaryにキーと値をとった過負荷があることは知らなかった。 – Kivin

+0

偉大な答えは、KeyValuePair の代わりに私のソリューションを指摘しますか? (またはタプル<文字列、文字列>)??私は重複した値を持っているので、私は自分の文字列を利用可能な複写と解析する必要があります。 – user1970395

+0

文字列にキーが複数回表示されるため、重複するキー例外が発生します。 –

1
string sourceStr= "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"; 

Dictionary<string,string> names=new Dictionary<string,string>(); 
string[] arr = sourceStr.Split(',');   
foreach (var ar1 in arr) 
{ 
    string[] itemArr= ar1.Split('='); 
    if (itemArr.Length > 1) 
    { 
     names.Add(itemArr[0], itemArr[1]); 
    } 
} 
//check names now 
2

を、値にはカンマがないことを確認するために、すべての値を持たない無キーを入力を検証しないキーが欠落していないことに注意してください

public class Student 
{ 
    public string Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

、その後:

private List<Student> DoSplit(string input) 
{ 
var theReturn = new List<Student>(); 
input = input.Replace(",StudentId=", "|,StudentId="); 

var students = input.Split('|'); 

foreach (var student in students) 
{ 
    var attribs = student.Split(','); 
    if (attribs.Count() == 3) 
    { 
     var s = new Student(); 
     s.Id = attribs[0].Substring(attribs[0].LastIndexOf('=')); 
     s.FirstName = attribs[1].Substring(attribs[1].LastIndexOf('=')); 
     s.LastName = attribs[2].Substring(attribs[2].LastIndexOf('=')); 

     theReturn.Add(s); 
    } 
} 

return theReturn; 
} 
入力で、私は次のような何かをするだろう

コンテンツに "="、 "、"、または "|"が含まれていると、失敗する可能性があるため、やはりこれはちょっと面倒です。いくつかのチェックインを追加する必要があります。

+1

これは正解であり、OPの質問に実際に答えます。 –

0

エリックPetroeljeは疑問符の後にすべて に渡し、System.Web.HttpUtility.ParseQueryStringを試してみてくださいhttps://stackoverflow.com/a/2049079/59996

でとても素敵な答えを持っていました。 System.Web アセンブリを使用する必要がありますが、Webコンテキストは必要ありません。

(これら二つの質問がリンクされていない理由を私はよく分からない)

は、私は、次のコードを使用してフォームA = 1 & B = 2 & C = 3の文字列を解析することができました文字列ではありません

NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(submission);