読者です 読者をやめる 読者になる 読者になる

ぺやろぐ

ゲームと奈々ちゃんと時々プログラミング

〔C#〕XMLファイルの読み込みと書き込み


どうも、ぺやんぐです。

今回は気が向いたのと備忘録も兼ねて、C#でのXMLファイルの読み込みと書き込みについて。
単純な読み書きだけだから、細かい処理とかはまたいつか。

◆目的

XMLファイルの取り扱いを学ぶ。


◆実装

まず、保存するデータを持つクラスを作成

よくあるPersonクラス


Personクラス


こんなクラスがあったとする。

まずは、XMLに書き込む処理


XMLに書き込む処理


これで、Personのリストをxmlに保存することが可能。

次に、xmlからの読み込み処理


XMLから読み込む処理


これでXMLの中身を、Personのリストで返してくれる。


◆まとめ

xmlの中身は


書き込み後のXMLの中身


こんな感じになると思われる。
Nameの「aaaaa」とAgeの「20」は保存する前にリストに入れたデータ。

コード内ではリストで保持するので、データをごにょごにょしやすい。

〔C#〕〔WPF〕閉じる時に行う処理をMVVMで追加する

前回の記事で予告していた通り、「ここが詰まったよ!WPF」シリーズということで第1弾は閉じる時に行う処理の追加についてご紹介します。

第何弾までやるのかは未定です。

目的

コードビハインド側で言うところの「OnClosing()」メソッドに処理を追加することをMVVMで実装する。

経緯

閉じるタイミングで何かしたいときってOnClosingに記述すれば基本的にOKなんですが

protected override void OnClosing(CancelEventArgs e)
{
       base.OnClosing(e);

       // 何か処理追加
}

MVVM的にはこれはよろしくない。(と思っています。)

そこで、どうしようかと考えた結果が以下。(かんろくのソース流用)

実装

見た目を変更して閉じるボタンを自前で用意していることが前提条件です。
デフォルトのままの閉じるボタンに処理の追加は僕にはできませんでした。(情報求ム)
まず、ViewのコンストラクタでModelクラスのCloseActionプロパティにthis.Close()の処理を渡しておきます。

MainWindow.xaml.cs

public MainWindow()
{
     InitializeComponent();

     var mView = new ViewModel.MainViewModel();
     this.All.DataContext = mView;
     // OnClose時に処理を行いたいので、Model側で閉じられるようthis.CloseをVMに渡す。
     if(mView.Model.CloseAction == null)
           mView.Model.CloseAction = new Action(() => this.Close());
}

メソッド名はなんでもいいのですが、わかりやすくOnClosingとしておいたメソッドに、追加したい処理とCloseActionプロパティの呼び出しをします。

MainModel.cs

// 閉じる処理プロパティ

public Action CloseAction { get; set; }

public void OnClosing()
{
     // 追加したい処理
     CloseAction();
}

ViewModelではコンストラクタの中でICommandのCloseにModelクラスのOnClosingメソッドを紐づけさせます。 

MainViewModel.cs

public ICommand Close { get; private set; }

public MainViewModel() 
{

     Close = new RelayCommand(_Model.OnClosing);

}

RelayCommandはGitHubを確認してください。(
KanmusuDrop/RelayCommand.cs at master · peyangu/KanmusuDrop · GitHub
)

それができたら、xamlで閉じるボタンのCommandにCloseをBindしてあげると閉じるときに処理を挟むことができます。

<Button x:Name="CloseButton" Content="r" Style="{DynamicResource CaptionButtonStyleKey}" Command="{Binding Close}">

 

まとめ

かんろくのドロップ情報を保存する処理がまんまこの流れです。

これはこれでどうなのかと思わなくもないですけどね。

一応、コードビハインドを使わずにできたってことで良しとしましょう。

もっといい実装方法あれば教えてください<(_ _)> 

ということで、第1弾「閉じる時に行う処理をMVVMで追加する」でした。

ツールの作成を通じて

こんばんは

 

前回の記事で、ツールを作ったよーって感じでご紹介させていただきました。

でまぁ、あのツールを作った感想とか書いておこうかと。

 

今回、仕事で触ったことがないWPF+MVVMってことで調べるところからスタートしたんだけども、MVVMについてがほんとに苦労した。

正直、理解が及んでない状態のコードになってると思う。

自分の中ではMVVMに近づけようと努力したんだけどね。

足りていないのは単純に地力不足です。

 

で、自分なりに組んでいるとたしかに、きれいになっている気はする。

ただ、コードビハインドに書かないっていうのがなかなかなじめなかった。

閉じるボタンも自前で用意しているんだけど、コードビハインドならthis.Close()でいいところをMVVMにするとやたらめんどくて、「もう、コードビハインドでいいかな」と思ったこと数回。

ViewModelとModelの実装をごちゃごちゃ入れ替えたの数回。

 

でも、新しいことをやるって楽しいね。

今回のことで成長できたなって実感した。

仕事で触らないから、またこのパターンでツールを作りたいね。

(コードを公開したらどこかの優しい人が指摘してくれるかもしれないし。)

 

甘い部分はあるかと思いますが、使ってくださると喜びます。

よかったよ報告、バグ報告(ないことを祈る)をお待ちしております。

 

次回から、このツール作成時に詰まった部分を備忘録として残すためのシリーズ「ここが詰まったよ!WPF」をお送りするかもしれない……。

 

じゃあの。

 

艦娘ドロップ記録ツール - かんろく -

ということで、艦娘ドロップ記録ツール略してかんろくについて。

かんろくとは

ブラウザゲーム艦隊これくしょん ~艦これ~」の便利ツールです。

勝利判定を選択し、名前を入力するだけでドロップの記録がされるツールです。

イベントなどでの堀りの記録にどうぞ。

レアリティに応じて、背景色が変わります。
csv出力とドロップ登録時にツイートする機能を備えています。

ツールの性質上、他ゲーでも使えます。
ただし、レアリティに応じた背景色の変更はされません。

操作画面

f:id:peyangu485:20151206114858p:plain

主な機能

・ドロップ情報の記録

・登録したドロップ情報のCSV出力

・ドロップ情報のリセット

Twitter連携機能による、ドロップ情報ツイート機能

各機能の細かい説明は付属のreadme.txtに記述しています。

動作環境

Win7,Win8.1での動作は確認しています。

Win10での動作は確認しておりませんので、Win7Win8.1での使用をおすすめします。

使用条件

オープンソース/フリーウェアです。
無料でご利用いただけます。
ソースコードは、MITライセンスの下でGitHubにて公開しています。

ダウンロード

KanmusuDrop 1.00.zip

画面上部のダウンロードボタンを押してください。

 

※ダウンロード及びツールの使用は、すべて自己責任で行ってください。このツールを使用した結果生じた損害について、開発者は一切責任を負いません。

 

開発環境・言語・ライブラリ

C# + WPF

WIN7 + VS2013 Proffetional です。
ソースコードGitHubで管理しています。(公開するとまずい部分を含むクラスについては、公開していません)

Win7で使用する場合は、.NET FrameWorkは4.5のインストールが必要です。

Win8以降は標準でインストールされています。

Download Microsoft .NET Framework 4.5 from Official Microsoft Download Center

その他

ツールのアイコンを募集しています。

よろしくお願いします<(_ _)>

質問などはtwitterのリプかこの記事のコメントにお願いします。

変更履歴

2015/12/6 ver.1.00 GitHubにて公開。本体リリース。

 

 

FizzBuzz問題

ほんとにすぐできたからさっそく公開。

まず、FizzBuzz問題について

wikiより

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。


というゲームをプログラムで書いたらどうなるかっていうのが今回の記事のネタ。

またもやwikiより

このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードがかけないプログラマ志願者を見分ける手法を Jeff Atwood が FizzBuzz問題 (FizzBuzz Question)として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている。


だそうです。

程度の差はあれど、動くものレベルなら作れるでしょうって思いきや、できない人がちらほらいるらしい。

問題文は
「1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。」
で、あとは追加で条件があったりする。

このままだとまぁ、いろいろ気になる部分はあるわけだけどもあえてスルーします。(あくまで遊びなので

で、こちらが私が書いたコード
fizz1buzz

実行結果↓
fizz1buzzcon
fizz1buzzcon2

とまぁ、こうなります。

本当に動くものレベルならこれでいけます。
少し改造したものがこちら
fizz2buzz
引数を変えれば、FizzBuzzの出力位置が変わるようにしました。
あと、出力する数字の数も。

実行結果↓
fizz2buzzcon
fizz2buzzcon2
fizz2buzzcon3

4の倍数と7の倍数で文字に変わってますね。
出力している数も120まで増えてます。

もっと、いろいろ制約つけたりあえてめんどくさい処理の仕方で書いてみたりなどなどネットを探せば出てきます。

個人的なわざわざシリーズとしてはStrategyパターン使ってみたら面白そうな、ただめんどそうな感じがしてます。

これを研修終わりの新人にさせてみると、個性が見られて楽しそうです。

最後に、コードの拙さについては遊びということで目をつぶっていただきたいです……。(久々にコード書くんだもの、ちかたないね)
ネットをさ迷って、自分の勉強不足を痛感してるので、これからに期待ってことでなにとぞ(m´・ω・`)m

じゃあの

ぷろふぃ~る

はじめまして!
「ぺやろぐ」の管理人のぺやんぐです!

この記事では私のことやぺやろぐのことを知ってもらうのが目的です。

このブログの主な内容

の3本です。

技術系のブログを目指しつつも、自分のこともオープンにしていきたいとの思いからこういう構成になっています。

ぺやんぐ とは

※注意
カップ焼きそばではないです。

  • 名前:ぺやんぐ
    由来:高校の時に先輩に付けられたあだ名

  • 誕生日:4月16日(チャップリンと同じ日です)

  • 出身地:大阪
  • 性格:温厚、まじめ、めんどくさがり、熱しやすく冷めやすい、1人が好きだけど、たまに寂しくなる、人間嫌い(自分も含みます)

プログラマとして働いています。


趣味

  • ゲーム
  • プログラミング
  • 実況動画の視聴(わいわいさんがおすすめ)


尊敬する人

  • 水樹奈々


好きなアーティスト

  • B'z
  • 水樹奈々(アーティスト枠でいいのか?)


好きな食べ物

  • いちご
  • チャーハン
  • オムライス
  • ラーメン


好きな言語

  • C#


病気と経歴

1型糖尿病を中学3年生の2月に発症しました。
受験にどんぴしゃにぶつかったので、志望校に行けるか怪しいと言われましたが、退院後の試験1週間前からぼちぼち勉強始めて、無事に合格しました。
時系列で言うと…

2月12日の私立の試験後、風邪をひく。

休んでも体調が良くなるどころか、起き上がることすらかなり辛くなる。(最初の方は体調悪くてもFF12してました)

2月23日の夜中、おなかの激痛で病院に運ばれ、1型糖尿病であることが発覚。(おなかは便秘が原因でした)
その時の血糖値が780あたり。
あと数日放置してたら、今こうして文字を打ってなかったそうです。

落ち着くまで入院し、3月1日に退院。

退院後、やり残していたヤズマット(FF12のボス)を倒したり、半月遊べなかった分遊んでいたら試験1週間前だった……。

って感じですね。

よく受かったもんです。

とまぁ、試験のことは置いておいて、こうしてインスリン注射をする生活になるのでした。

最初は戸惑いもありましたが、人生を悲観して~とかはなかったですね。
「まぁ、そんなもんか」程度だったと思います。
事の重大さを理解していないとも言えますが。

ですが、これを機に人生観が変わったような気がします。
例えば、「ごはんを食べられることの幸せ」っていうのをすごく感じましたね。
なので、「いただきます」と「ごちそうさま」は今でも欠かさないです。
あと、病院のスタッフさん、友達や家族のやさしさに触れてすごくうれしかったのを覚えています。

ただ、この時期で変わったがために人間嫌いになっていくんですが……。

退院後の学校では、もうすぐ会わなくなる人の前でわざわざ珍しいものを見せる必要はないと思い、保健室で注射してから教室に戻ってごはんを食べる生活をしてました。

そして、無事卒業。

高校に入ってからは、隠すこともなく堂々と教室で注射打ってごはんを食べてました。
最初は、周りも驚いていましたが慣れたのか、すぐに日常風景になりました。(ありがたい話です)

高校では和太鼓部に入ってました。(これ、特定されるやつやw)
そのあたりから実はブログを始めてたんですよね。
更新なんてほとんどなかった日記ですが。

まぁ、その話はいいや。

で、先ほど書きましたが、この時期から人間嫌いが起こるんですね。
まぁ、簡単な話、
「自分が恵まれた環境で体に不自由なく過ごせていることに感謝しなさすぎだろお前ら」って考えるようになったんですよ。
ごはんは出てきて当たり前、毎日学校に行くのも当たり前。
私もそう思っている部分もあるので、全否定はしないですが、それにしても……ってところが引っかかって、他人が鬱陶しいと感じるようになりました。

これはこれでイタい人ですね。
仕方ないです、まだ10代の子どもでしたし。
ただ、ここでできた傷はいまだに癒えないんですけど……。

とか言いながらも、彼女ができたり、部活で青春過ごしたりと一般的(?)な高校生活を送って、卒業します。

進学には専門学校を選び(説明会行って面接受けたら合格だったから)、本格的にシステム業界に目を向けることになります。

学校ではプログラミングを学び、基本情報、応用情報を取得しました。
取得した理由も単純で「就活に有利」だから。
まぐれ合格だろうと合格は合格。
合格ラインぴったりでも何も問題ない。

学校が市内にあるということで、このあたりからゲーセン通いが始まります。
きっかけは初音ミクのProject DIVAってアケゲーなんだけども。

で、ゲーセンでの繋がりからさらに人間嫌いが加速します。
後にも先にもあそこまで他人を軽蔑したのはないかもしれません。


さて、こうして人間嫌いぺやんぐが製造され、IT業界へ就職することになります。

就職してからはこの業界らしい働き方をしています。

同期に変なのが2人いたり、長期出張がめったにないなか私が選ばれたり、鬱になりかけたり……。

鬱になると、仕事に行けないとかよくある話ですが、感覚的には「まぁ、そんな精神状態なんだからいけるわけないよな」と分かっていても、いざ自分がそこに足を踏み入れかけると、すごく実感しました。

いやほんと、「家を出る」ってことができないんですよ。
着替えも終わって鞄を持つ段階で、急に動けなくなる。
結局1週間休んで、次の週には現場を撤収、自社へは普通に出勤できるっていう。

ほんとに軽度の鬱のようなものだったけど、辛かった。

そのあとは何事もなく仕事できてるんで、きっと大丈夫です。

そして、今に至る。

ここまで書いたら会社にばれそうだな……。
まぁ、まずいこと書いてないからいけるやろ。(楽観)


ぺやんぐってこんな感じの人です。
こんな人が日々、「うぽーーー」とか言ってます。
Twitterはこちら(@peyangu485)


以上、プロフィールになります!
今後ともブログとともによろしくお願いします!!






たぶん、あとで修正するパティーンや……。

プライバシーポリシーについて

◆プライバシーポリシー

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイト楽天アフィリエイトバリューコマース)を利用しています。 このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。 またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。 このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。 このトラフィックデータは匿名で収集されており、個人を特定するものではありません。 この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。 この規約に関して、詳しくはこちら、またはこちらをクリックしてください。