2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C# csv→xmlでLINQで簡単に扱う[LINQ to XML]

Posted at

#うわ、定義データが全部CSVファイルだ。
Exelなどで定義され出力されたファイルによって、WinFormsで扱いたいデータがcsv形式ということが多々ありました。csvを読み込みそのまま扱うこともできますが、数百から数千あるとxmlで生成しておく方がC#のlinqで恩恵を受けやすく操作が簡単かと思いました。今回はcsvを読み込みxmlとして生成→定義しlinqで簡単にデータを扱っていきます。

#csvからxml
例ですが、対象のcsvファイルは以下のようになっているとします。
1番目の要素は男性ID、2番目の要素は女性ID、3番目は出力文章です。

english.csv
1,25,This season's anime is abundant,
2,26,I eat jam bread every day, 
....続く

これらのcsvファイルをxmlに変換していきます。

mendoi.cs
using System.Xml.Linq

string[] csvfile = File.ReadAllLines("english.csv");
XElement parent = new XElement("EngishConfigs",
    from str in csvfile
    let items = str.Split(',')
    select new XElement("EnglishConfig",
        new XElement("ManID", items[0]),
        new XElement("WomanID", items[1]),
        new XElement("Sentence", items[2])
    )
);
parent.Save("English.xml")

とすると以下のようにxmlファイルが生成されます。

English.xml
<EngishConfigs>
  <EnglishConfig>
    <ManID>1</ManID>
    <WomanID>25</WomanID>
    <Sentence>This season's anime is abundant</Sentence>
  </EnglishConfig>
  <EnglishConfig>
    <ManID>2</ManID>
.....続く

</EngishConfigs>

#XMLファイルをLINQで扱う
csvからXMLを生成したところで、これらの定義ファイルをLINQを使って操作していきたいと思います。今回のケースとしては、受信したデータや条件判定されたID(男性または女性)の値から出力する文章を取得し扱う。というケースでいきます。

sample.cs
var xelm = XElement.Load( @"C:\Gomibako\English.xml" );
var emp = (
     from p in xelm.Elements( "EnglishConfig" )
     where p.Element( "ManID" ).Value == "条件から取得した値" ||
       p.Element( "WomanID" ).Value == "条件から取得した値"
     select p ).Single();

MessageBox.Show( emp.Element( "Sentence" ).Value );

#まとめ
このようにcsvからXMLファイルとして定義しておくことで、LINQの恩恵によりデータを扱いやすくなりました。今回は紹介しませんでしたが、LINQでXMLを操作することで、複数要素の選択や集計した値、ソートなど様々な関数が使えるみたいでC#のLINQ最高ですね。これらのデータを保持しておく方法は他にも多々あるかと思いますが、数千行ある情報をコピペでxmlファイルにコピペしている人を目撃したので、今回はその代用としてこの方法を使いました。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?