2017-01-09 3 views
0

私はC#オブジェクトを持っていて、それをCSVファイルにエクスポートしたいプロジェクトに取り組んでいます。C#文字列を複数のCSV描画列に変換しますか?

輸出は次のようになりますオブジェクトのための素晴らしい作品:

Name Height Address  FavoriteColor 
--------------------------------- 
Debacle 6 feet 123 Hope St Yellow 
Yarn 5 feet 321 Despair Blue 

しかし:上記の例では

public class Person 
{ 
    public string Name { get; set; } 
    public string Height { get; set; } 
    public string Address { get; set; } 
    public string FavoriteColor { get; set; } 
} 

、私が持っているCSVコードは以下のようなファイルをエクスポートします私はそれが私に逆行するDOに複雑さを加えようとします:

public class Person 
{ 
    public string Name { get; set; } 
    public string Height { get; set; } 
    public string Address { get; set; } 
    public string FavoriteColor { get; set; } 
    public List<string> Hobbies { get; set; } 
} 

出力は次のようになります。

Name Height Address  FavoriteColor Hobbies 
------------------------------------------------ 
Debacle 6 feet 123 Hope St Yellow  System.Collections.Generics.List<string> 
Yarn 5 feet 321 Despair Blue   System.Collections.Generics.List<string> 

Hobbiesオブジェクトを印刷する代わりに、オブジェクトのタイプとメモリ位置を印刷します。

私はそれがリストから取得し、より多くのこのようなものをオフに印刷持つ方法を見つけようとしている:

Name Height Address  FavoriteColor Hobbie1 Hobbie2 Hobbie3 
---------------------------------------------------------------- 
Debacle 6 feet 123 Hope St Yellow  reading writing otherstuff 
Yarn 5 feet 321 Despair Blue   yes  no 

をしかし、私は動的にこれらの列を生成する方法に空白をアップ来ています。 Listオブジェクトをカンマ区切りの文字列、辞書などに変更しましたが、目的の機能を取得できません。

C#で私が逃しているかもしれないトリックはありますか?

ありがとうございました!

+0

オブジェクトをCSVに変換するために使用しているエクスポートコードを投稿できますか? –

+0

あなたのToStringメソッドはあなたのPersonクラスのように見えますか?おそらく個々のアイテムを出力するためのループが必要なので、どのようにして 'Hobbies'というリストを出力しようとしていますか?例:Foreach(趣味のストリングホビー)。 – JohnG

+0

値の間に**カンマ**を持つCSVを作成していません。値を列に並べる場合は、** PAD **にスペースを入れて値を整列させるか、または** TABS **で値を区切らなければなりません(これにはさらに調整が必要ですが、個々の値の長さに応じて)。いずれにしても、 'List 'の値を持っていれば、 'String.Join("、 "、Hobbies.ToArray());'のようなコードを使って素早く出力することができます。 –

答えて

1

あなたは個々の趣味を得るためにコレクションをループする必要があります。以下に、Personクラスに追加して情報を出力するための2つのメソッドを示します。

public string GetHobbies() { 
    StringBuilder sb = new StringBuilder(); 
    foreach (string hobbie in Hobbies) { 
    sb.Append(hobbie + " "); 
    } 
    return sb.ToString(); 
} 

public override string ToString() { 
    return Name + " " + Height + " " + Address + " " + FavoriteColor + " " + GetHobbies(); 
} 
+0

ありがとう!これは文字列(クールです)に追加されますが、趣味を個々の列(excel csv)に解析する次の部分がここでどのように機能するかはわかりません。 – Debacle

+0

@Debacle趣味を列に分割するには、 'foreach'ループを使用できます。ループするたびに、そのホビーを別の列に入れたいと思うでしょう。それが動作していない場合、私はあなたのコードを参照する必要があります。 – JohnG

関連する問題