DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数行の文字列から検索するには?

環境/言語:[Windows XP Pro,VS2008]
分類:[.NET]

2009/07/08(Wed) 22:34:18 編集(投稿者)

こんにちは。
C#で悩んでいる者です。

ReadAllLinesで読み込んだ多数行にわたる文字列があります。

その文字列の「奇数行目」の中から特定の文字列を検索し、マッチした「奇数行目」の次の「偶数行目」を返すのはどうやるのでしょうか?

結構考えたのですが、わかりません。。。
例
「なえた」を検索:
_______________
|1あのさー。   |
|2なんだ?      |  
|3なえたんだが |
|4よかったな。 | 
|_____________ |
3行目に「なえた」があるから「よかったな」を返す・・・。

あと追加で質問させていただくかもしれません;;;

よろしくお願いします!
きちんと読んでいませんが、わんくまのBBSの話と同じことでしょうか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=37991&page=20
この投稿はマルチポストです。

●マルチポストされている場所
http://okwave.jp/qa5109417.html

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html
■No24918に返信(Axolotlさんの記事)
> ReadAllLinesで読み込んだ多数行にわたる文字列があります。
> その文字列の「奇数行目」の中から特定の文字列を検索し、
> マッチした「奇数行目」の次の「偶数行目」を返すのはどうやるのでしょうか?

たとえば、こうかな。

private void button1_Click(object sender, EventArgs e)
{
    string keyword /* = "なえた" */;
    keyword = textBox1.Text;

    string[] lines /* = { "あのさー。", "なんだ?", "なえたんだが", "よかったな。", } */;
    lines = File.ReadAllLines(@"C:\test.txt", Encoding.GetEncoding("Shift_JIS"));

    // 確認のため、元データを表示
    listBox1.DataSource = lines;

    // 抽出
    string[] result = new List<string>(Filter(lines, keyword)).ToArray();

    // 確認のため、抽出結果を表示
    listBox2.DataSource = result;
}

IEnumerable<string> Filter(string[] lines, string keyword)
{
    for (int n = 1; n < lines.Length; n += 2)
    {
        if (lines[n - 1].Contains(keyword)) yield return lines[n];
    }
}

DOBON.NET | プログラミング道 | プログラミング掲示板