« 2009年05月 | メイン | 2009年07月 »

2009年06月 アーカイブ

2009年06月04日

画像一括結合ソフト ImageMerge 0.1.2公開

画像一括結合ソフト ImageMergeのバージョン0.1.2を公開しました。

画像一括結合ソフト ImageMerge 0.1.1公開」の記事のコメントでいただいた機能を実装しました。

2009年06月13日

数値と文字列の相互変換を行う boost::lexical_cast

C++Builder 2009からBoostが標準添付されて、とても使いやすくなりました。

boost::lexical_castは、数値と文字列の相互変換を行う関数です。

型によって関数を使い分ける必要がなく、同じように書くことができます。

#include <string>
#include <boost/lexical_cast.hpp>
using namespace std;

int n = boost::lexical_cast<int>("3");
string s = boost::lexical_cast<string>(123);

C++テンプレートテクニック』には戻り値の型を推論することで、型の指定を不要にする方法が紹介されています。
次のようなコードを書くことができます。

int n = lexical("3");
string s = lexical(123);

詳しくは『C++テンプレートテクニック』をご覧下さい。

2009年06月14日

Mail Export Tool バージョン0.7.7を公開しました

Mail Export Tool バージョン0.7.7を公開しました。

変更点

  • エラー報告機能を追加しました。
  • メールのヘッダ文字列がエンコードされていないときに文字化けが発生する問題を修正しました。
  • 変換対象から「Eudoraのmbxファイルから」「Shuriken/Shuriken Pro形式のファイルから」を削除しました。
  • ヘルプファイルにメールソフトごとの使い方を記載しました。

D2 バージョン2.2.2を公開しました

D2 バージョン2.2.2を公開しました。
報告をいただいたバグを修正しました。

変更点

  • メールのヘッダ文字列がエンコードされていないときに文字化けが発生する問題を修正しました。

2009年06月15日

CSV Mailer バージョン0.3.0を公開しました

CSV Mailer バージョン0.3.0を公開しました。

2つの不具合を修正しました。

  • メールプレビュー画面の誤記を修正しました。
  • メール送信時の未入力チェックを修正しました。

正規表現ライブラリ std::tr1::regex

C++ TR1には正規表現ライブラリが含まれます。

C++Builder 2009で試してみたところ、std::tr1::regexを使用できました。

#include <iostream>
#include <regex>
#include <string>

//リンクのタグからURLを取得する
std::tr1::regex expression("href=\".*\"");
std::string tag = "<a href=\"http://www.gesoruce.jp/weblog/\">山本隆の開発日誌</a>";
std::tr1::smatch match;

if (std::tr1::regex_search(tag, match, expression))
{
  std::cout << "url=" << match.str(1) << std::endl;
}

2009年06月16日

D2バージョン2.2.3a(ベータ版)を公開しました

D2バージョン2.2.3a(ベータ版)を公開しました。

今回のバージョンアップでは、パラメータ入力画面の高度タブに「パラメータ文字も値に含める」を追加しました。

より自由度の高いメール解析・データ取得が可能になりました。

2009年06月18日

__propertyの使い方

__propertyの使い方を整理してみた。

基本形

__property 型 名前 = { プロパティ属性 = データ/関数, … }

プロパティ属性の種類

  • read
    読み込み時に参照する変数/関数

  • write
    書き込み時に参照する変数/関数

  • stored
    ture/false/論理値を返す関数
    コンポーネントとして保存するかどうか

  • default
    デフォルトの値

  • nodefault

  • index
    リストや配列のインデックス。

例:メンバ変数を直接読み書き

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = FCount, write=FCount }; //メンバ変数を指定
};

TMyClass obj;
obj.Count = 123;
cout << obj.Count << endl; //=>123

例:メンバ関数を通して読み書き

class TMyClass {
private:
  int FCount;
  void SetCount(int Count);
  int GetCount();
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = FCount, write=FCount }; //メンバ関数を指定
};

例:読み込み専用

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = FCount }; //readのみ
};

例:書き込み専用

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { write=FCount }; //writeのみ
};

例:静的プロパティ

class TMyClass {
public:
  static int FCount;
  static int GetCount();
  static void SetCount(int Count);
  __property int Count = { read = GetCount, write = SetCount }; //静的プロパティ
};

cout << TMyClass::Count << endl;

例:配列

class TMyClass {
private:
  int FDate[3];
  int GetDate(int Index) { return FDate[Index]; }
public:
  TMyClass() { FDate[0] = 2009; FDate[1] = 1; FDate[2] = 2; };
  __property int Year = { read=GetDate, index = 0 };
  __property int Month = { read=GetDate, index = 1 };
  __property int Day = { read=GetDate, index = 2 };
};

TMyClass obj;
cout << obj.Year << endl; //=> 2009
cout << obj.Month << endl; //=> 1
cout << obj.Day << endl; //=> 2

例:リスト

class TMyClass {
private:
  unique_ptr<TStringList> FDate;
  UnicodeString GetDate(int Index) { return FDate->Strings[Index]; }
public:
  TMyClass() : FDate(new TStringList()) {
    FDate->Add("2009"); FDate->Add("1"); FDate->Add("2");
  };
  __property UnicodeString Year = { read=GetDate, index = 0 };
  __property UnicodeString Month = { read=GetDate, index = 1 };
  __property UnicodeString Day = { read=GetDate, index = 2 };
};

TMyClass obj;
wcout << obj.Year.c_str() << endl; //=> 2009
wcout << obj.Month.c_str() << endl; //=> 1
wcout << obj.Day.c_str() << endl; //=> 2

2009年06月27日

xls2htmlの独自タグについての説明を加筆しました

xls2html独自タグについての説明を加筆しました。
CELLタグのfixed属性の説明を追加しました。

xls2htmlは、Excelで作成されたファイルをHTMLに変換するソフトウェアです。
Excelの表をHTMLのTABLEに変換するソフトは数多くありますが、
xls2htmlはテンプレートファイルの設定に従って自由な形式で変換できます。

元々、私の個人的なツールでしたので、初心者向けのソフトではありません。
HTMLの知識など、使用するにはある程度のスキルが必要になります。
とても一般向けのソフトとは言えません。
それでも多くのユーザにご利用いただいています。

当時は類似ソフトがありませんでしたので自分で作りましたが、今では似たようなソフトがあるかもしれません。
それでもxls2htmlを選んでもらえているのは、独自タグの強力さにあると思います。

xls2htmlを開発している当時、私が変換しなければならなかったExcelファイルは、見た目は整っていましたが、デジタルデータとしては使いにくいものでした。
そのようなExcelファイルがたくさんあり、とても手作業ではできない状況でした。
扱いにくいデータ形式に対応するために、自由度が高くて変換機能が強力なソフトである必要があったのです。
結果として、xls2htmlの3つの独自タグ(Excelタグ、Cellタグ、LOOPタグ)には、数多くの属性を指定することができるようになりました。
この強力さが今でも使っていただけている理由だろうと思います。

最後のバージョンを公開してから、もう5年もたちますね。
時間ができれば、Windows VistaやWindows 7に対応するために、
GUI部分だけでもC++Builderで作り直しても良いかな、と思っています。

2009年06月29日

メールの本文中にあるメールアドレスを抽出する方法

メールの本文中にあるメールアドレスを抽出する方法。

D2 メール自動データベース変換ソフト」を使うと、 メールの本文中に登場するすべてのメールアドレスを抽出することができます。

D2 メール自動データベース変換ソフト」のパラメータの設定方法を紹介します。

パラメータタブの設定

パラメータ文字を選択すると、パラメータタブの残りの項目は自動的に設定されます。

パラメータタブ

  1. パラメータ文字

    プルダウンメニューから「^(本文)」を選択します。

  2. 正規表現を使用する

    チェックします。

  3. 場所

    「本文」を選択します。

  4. 行数

    「複数行」を選択します。

  5. 変換開始行

    「パラメータ行から」を選択します。

高度タブ

高度タブ

  1. メールアドレスを抽出する

    チェックします。

  2. すべてのメールアドレスを抽出する

    抽出するメールアドレスが1つだけの場合は、チェックしません。

    すべてのメールアドレスを抽出する場合は、チェックします。

以上です。

この設定で、メールの本文中にあるメールアドレスを抽出することができます。

うまく変換できない場合は気軽にお問い合わせください。
連絡先はヘルプに掲載しています。

2009年06月30日

NetBeans 6.7 リリース

NetBeans 6.7がリリースされました。

NetBeans IDE 6.7 リリースノートを見ましたが、あまり魅力的な新機能がありませんでした。

Pythonの正式サポートも、まだ行われていません。

急いでバージョンアップするほどのものでもないと思います。

Mail Export Toolでメールでの議論をHTMLに変換して見やすくする

Mail Export Toolは、様々な形式のメールを様々な形式に変換するソフトウェアです。

Mail Export ToolでHTMLに変換することで、メールでの議論をブラウザで見やすくすることができます。

Mail Export ToolではテキストファイルやCSVファイルにの他に、HTMLファイルに変換することができます。

HTMLファイルは単純な一覧形式と、議論の流れが見やすいスレッド形式を作成することができます。

メーリングリストで投稿されたメールをMail Export Toolにすることで、 過去ログを見やすくしたり、情報の共有を促進することができます。

皆さんのご意見やご要望をお待ちしています。
気軽にお問い合わせください。

About 2009年06月

2009年06月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2009年05月です。

次のアーカイブは2009年07月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35