SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

メールでデータベースを更新するココロミ
~C++での即興実装

フリーなライブラリのコンビネーション

おためしアプリのできあがり

 ここまでに示したメール受信,XMLパース,DB登録の各コードをmainから順に呼び出せばできあがり。Windows-Schedulerに登録しておけば定期的に起動できます。

prototype.cpp(mainのみ)
int main() {
  locale ja("japanese");
  wcerr.imbue(ja);
  wcout.imbue(ja);
  try {
    XMLPlatformUtils::Initialize();
  } catch ( const XMLException& ex ) {
    wcerr << ex.getMessage();
    return 1;
  }

  // POP3からXMLを読み取り、
  vector<string> msgs;
  get_xml_from_pop3(pop3_address, pop3_port, mail_user, mail_pass, back_inserter(msgs));

  wcout << L"----------- I've got these XMLs ------------------" << endl;
  for_each(begin(msgs), end(msgs), [](const string& body) { cout << body << endl; });

  // XMLから<word>要素の"en","ja"属性値を抽出し、
  vector<word_type> words;
  extract_words(begin(msgs), end(msgs), back_inserter(words));

  wcout << L"----------- I'found these words in the XMLs ------------------" << endl;
  for_each(begin(words), end(words),
           [](const word_type& word) { wcout << get<0>(word) << L',' << get<1>(word) << endl; });

  // データベースに登録して、
  sqlite3* db;
  sqlite3_open(db_path.c_str(), &db);

  create_table(db);
  insert_word(begin(words), end(words), db);

  // 登録された単語を出力する
  words.clear();
  enumerate_word(db, back_inserter(words));
  wcout << L"----------- now I have these words ------------------" << endl;
  for_each(begin(words), end(words),
           [](const word_type& word) { wcout << get<0>(word) << L',' << get<1>(word) << endl; });

  sqlite3_close(db);

  XMLPlatformUtils::Terminate();
  return 0;
}

 僕が書いたのはそれぞれのライブラリ間を仲介する"糊"の部分だけで、それさえもC++標準ライブラリで楽させてもらいました。コードいじくりまわしていたのは正味3時間くらいだったでしょうか。コードの総行数は200行そこそこながら依頼主には満足してもらえたみたい。

 僕のオシゴト、熟考を要する設計/実装もあれば今回のようにざっくりと手早い実現が求められることも少なくありません。こんなこともあろうかと(?)ライブラリの入手と調査、メンテナンスに時間を割いておりますですよ。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

επιστημη(エピステーメー)

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6726 2012/08/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー