2012-03-22 12 views
1

私はすべてが同じように書式設定されたヘッダーを持つ情報の本質的な「段落」に分かれているテキスト文書を読み込もうとしています。テキストの段落を読み込み、StreamReaderを使用して次の行を取得

各ヘッダタイトルを親として、treeViewに追加し、残りのヘッダ情報を子としてtreeViewに追加します。

ヘッダーを追加するのは簡単ですが、子供を正しい親に追加する際に問題があります。私はStreamReaderを使って各行を読み、 "段落"の始まりを見つけて親を作ります。私が追加しなければならない子供たちは、次の3つの行になるでしょう。 StreamReader'sReadLine()からcurrentLineを取得するにはどうすればよいですか?それとももっと良い方法がありますか?

using (var sr = new StreamReader(file)) 
{ 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     //Sheet name 
     if (line.Contains("Sheet Name")) 
     { 
      string parentNodeName = line.Split('=')[1].Trim(); 

       //Add Parent 
       treeView.Nodes.Add(parentNodeName); 
       //Add children, on next 3 lines 
       treeView.Nodes[parentNodeName].Nodes.Add("Child-1 Text"); //on next line 
       treeView.Nodes[parentNodeName].Nodes.Add("Child-2 Text"); //on next next line 
       treeView.Nodes[parentNodeName].Nodes.Add("Child-3 Text"); //etc 
       } 
      } 
     sr.Close(); 
     sr.Dispose(); 
} 

ファイルからのサンプルテキスト(「段落」ヘッダ):

800: Sheet Name = Sheet3 
999 : Process = 2 
1000 : Material = AL,CR,STEEL 
1001 : Cut Quality = 0,1,2,3,4,5,6,7,8 

は、同一の親ノードに子を追加して、ツリーに追加するこれらの行を解析するつもりです。 Like:

Sheet3 
    2 
     AL,CR,STEEL 
       0,1,2,3,4,5,6,7,8 
     SS 
       0,1,2,3,4,5,6,7,8 
     MS 
       0,1,2,3,4,5 
    4 
     AL,CR,STEEL 
       0,1,2,3,4,5,6,7,8 
     MS 
       0,1,2,3,4,5 
    10 
     AL,CR,STEEL 
       0,1,2,3,4,5,6,7,8 
     SS 
       0,1,2,3,4,5,6,7,8 
+0

フォーマットを見ることができるようにいくつかの段落のサンプルテキストを投稿できますか? –

+0

いつも次の3行を読まなければならない場合は、何が問題なのか分かりません。 – JotaBe

+0

'sr.ReadLine()'に何か問題がありますか? –

答えて

4

ここでは、ファイルを読み込んでTreeViewを構築する方法の例を示します。

using (var reader = new StreamReader(file)) 
{ 
    while (!reader.EndOfStream) 
     AddParagraphToTree(ReadParagraph(reader)); 
}  

実際に言えば、ファイルの解析とツリーの構築という2つの操作を分割する方がよいでしょう。しかし、迅速なサンプルのために行くでしょう。また、Dispose()がブロックの使用終了時に自動的に呼び出されることも考慮してください。

private class Paragraph 
{ 
    public string SheetName { get; set; } 
    public string Process { get; set; } 
    public string Material { get; set; } 
    public string CutQuality { get; set; } 
} 

ここでファイルを解析します。私はファイルが予想される形式であると思います。エラー処理なし、フォーマットチェックなし。あなたはいくつかを自由に追加することができます:

private Paragraph ReadParagraph(StreamReader reader) 
{ 
    Paragraph paragraph = new Paragraph(); 
    paragraph.SheetName = ReadNextValue(reader); 
    paragraph.Process = ReadNextValue(reader); 
    paragraph.Material = ReadNextValue(reader); 
    paragraph.CutQuality = ReadNextValue(reader); 
    return paragraph; 
} 

private string ReadNextValue(StreamReader reader) 
{ 
    return reader.ReadLine().Split('=')[1].Trim(); 
} 

ここでは、解析された段落をツリーに追加します。

+0

ooOOoOO非常に良い。これを試して、それがどのように動作するかをお知らせします...ありがとう! – ikathegreat

+0

しかし、悲しいかな、彼は決してしなかった。彼のズボンが火についているのだろうか? –

+0

悲しいかな、悲しいことに、これはデザイン仕様とはまったく一致していないことがわかったので、私は何か他のことをやらなければならなくなったのです。(しかし、情報は依然として非常に有用で、今は、 – ikathegreat

関連する問題