- 題名: テキスト内の検索
- 日時: 2009/10/01 18:05:18
- ID: 25481
- この記事の返信元:
- (なし)
- この記事への返信:
- [25482] Re[1]: テキスト内の検索2009/10/01 18:47:42
- ツリーを表示
■No25482に返信(ひらぽんさんの記事) >>と格納したいのですが良い方法は無いでしょうか? > LINQ をうまく使えばいけそうな気がします。 > テキストボックスの Multiline プロパティが True に設定してあると想定して > とりあえず "FXFX" を含む行だけ絞りこむ処理を考えてみました。 絞り込んだ後の、X/Y/Z の区切りがどうなっているのか分からなかったので、 カンマ区切りと仮定して作ってみました。要C# 3.0以上。 private void Form1_Load(object sender, EventArgs e) { textBox1.Text = @"TEST1,FXFX,X1000.001,Y-12.345,Z123.456,AAA TEST2,FAZZ,X200.002,Y-3.000,Z11.111,FXFX TEST3,SMPL,30.003,Y12.345,Z123.450,CCC TEST4,FXFX,X4.004,Y-33.333,Z-2.997,YYY TEST5,PRGM,X5.005,Y-72.768,Z54.123,ZZZ"; } private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); var reg = new Regex(@"^[XYZ](?<Value>-?\d*\.?\d*)$"); var listFXFX = textBox1.Lines.Where(sw1 => sw1.Contains("FXFX")) // FXFX を含む行を取得 .Select(ss => ss.Split(',').Where(sw2 => reg.IsMatch(sw2))); // X,Y,Zで始まる数値列を取得 // X,Y,Zそれぞれを合計 var result = new Dictionary<char, decimal>() { { 'X', 0m }, { 'Y', 0m }, { 'Z', 0m } }; foreach (var row in listFXFX) { foreach (string col in row) { result[col[0]] += decimal.Parse(reg.Match(col).Groups["Value"].Value); } } // 結果表示 listBox1.Items.AddRange(result.Select(p => p.Key + " = " + p.Value).ToArray()); /* X = 1204.007 Y = -48.678 Z = 131.570 */ }
分類:[.NET]
いつも閲覧させて頂いています。
テキストボックス内で
"FXFX"の文字列を含む行にある
"X","Y","Z"の値を格納して(X150.222,X-30.111等小数点含む)
全てFXFXの含む行分の検索結果を
X[1]=150.222
X[2]=-30.111
と格納したいのですが良い方法は無いでしょうか?
FXFXを検索して、検索結果の値分格納すればよいのでしょうか?