2015/02/22

[C#]ダミーデータをDataTableにして使う

このエントリーをはてなブックマークに追加
デバックやるにしても、何か学習するにも、hogehogeとかaaaとかダミーとして使ってしまうことがあります。aaaとかbbbとか。面倒くさいものなので動けばいいからと思って進めてると、ログ系とか、DB系でけっこうはまるのです。
そこでダミーデータをさくっと展開するためのサンプルコードを置いておきます。(解説っていうよりサンプルコードです)
テストとか、とりあえずなんか動かしてみるのにそれっぽいデータを用意するときに使えると便利です。

ダミーデータを準備する

今回使用するダミーデータは、なんちゃって個人情報さんから引っ張ってきます。
なんちゃって個人情報は、テスト用の個人情報をダミーで生成してくれるというオンラインサービスです。(つい最近知りました)
なんちゃって個人情報
http://kazina.com/dummy/

XMLにして出力件数を指定。今回の出力件数は200くらいにしました。

なんちゃって生成をクリック。
はい、XMLができました。

ファイルの名前を付けて保存からXMLを保存します。

※ちなみに、GoogleChromeでやるとXML作成まではやってくれましたが、そのままファイル保存すると失敗してしまいました。HTMLのなれの果てのようなファイルしかできないときは、IEでやってみてください。
↑失敗です

ダミーデータを展開する

生成されるXMLはrecordの繰り返しで構成されています。
1つのrecordは下のようになっています。構成は生成時のオプションによって変わりますので注意。

<record>
    <name>矢田 桃子</name>
    <ruby>やだ ももこ</ruby>
    <mail>yada_momoko@example.com</mail>
    <sex>女</sex>
    <age>68</age>
    <birthday>1947/1/16</birthday>
    <married>既婚</married>
    <prefecture>大阪府</prefecture>
    <keitai>080-1669- 474</keitai>
    <carrier>ドコモ</carrier>
    <curry>左ルー・別口派</curry>
</record>

DataSetのReadXmlメソッドつかって一発で読み込んでもいいんですが、XMLを展開して読み込むことにします。
/*
using System.Xml.Linq;
using System.Xml.XPath;
using System.Data;
using System.IO;
*/
// なんちゃって個情報をDataTableに展開する
private DataTable LoadDummyData(string dummyXml) {
  DataTable table = new DataTable();
  string[] columns = new string[] { 
  "name", "ruby", "mail", "sex", "age", "birthday", 
  "married","prefecture","keitai", "carrier","curry" };

  // ①DataTableのカラムをつくる
  table.Columns.AddRange(columns.Select(n => new DataColumn(n)).ToArray());

  // ②Xml読み込み準備
  StreamReader reader = new StreamReader(dummyXml, System.Text.Encoding.GetEncoding("shift-jis"));
  XDocument xDoc = XDocument.Load(reader);

  // ③recordエレメントを抽出
  IEnumerable<XElement> records = xDoc.XPathSelectElements("//record");
    
  foreach (XElement record in records) {
    DataRow row = table.NewRow();
                
    // ④DataRowに値をセットしていく
    columns.ToList().ForEach(n => row[n] = record.XPathSelectElement("./" + n + "").Value);
    table.Rows.Add(row);
  }
        
  return table;
}

// DataSetから読み込む方法
private DataTable LoadDummy(string dummyXml) {
  StreamReader reader = new StreamReader(dummyXml, System.Text.Encoding.GetEncoding("shift-jis"));

  DataSet ds = new DataSet();
  ds.ReadXml(reader);

  return ds.Tables[0];
}


ダミーデータを使ってみる

使ってみましょう。
GridViewのDataSourceにセットして、DataBindすれば。
string dummyXml = Path.Combine(this.Server.MapPath("dummy_cgi.xml"));

GridView1.DataSource = this.LoadDummyData(dummyXml);
GridView1.DataBind();
はい、このとおり。

以上です。

0 件のコメント :

コメントを投稿