ソフトウェアを開発し続けて早六年。 バグを憎んで人を憎まず。。 株式投資で脱サラをめざすITエンジニアのホームページ......
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Windowsデスクトップサーチとかが使っているIFilterを使っていろんなファイルからテキストを取得します。
テキストファイル,
Office(Word,Excel,Visio,PowerPoint...),
メール,
ヘルプファイル
など、Windowsデスクトップサーチで検索できるファイルなら何でも同じように、テキストを抽出できます。
例えば、
Diff(ファイル比較)や、テキストマイニングとかしたいときに役に立ちます。
ほかにも想像力しだいでいろいろ応用できそうな機能です。

ここからWindowsデスクトップサーチのAdd-inを取得すればさらに多くのファイルタイプに対応できます。

001 #include <iostream>
002 #include <tchar.h>
003 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 一部の CString コンストラクタは明示的です。
004
005 #include <atlbase.h>
006 #include <filter.h>
007 #include <ntquery.h>
008 #pragma comment(lib, "ntquery.lib")
009
010
011 bool execute(wchar_t *filePath){
012 ATL::CComPtr<IFilter> pFilter = NULL;
013 //ファイルの拡張子に応じて、IFilterをロードする
014 HRESULT res = ::LoadIFilter(filePath, NULL, reinterpret_cast<void**>(&pFilter));
015 if(FAILED(res)){
016 ATLTRACE("%d", res);
017 return false;
018 }
019 ULONG flags;
020 //初期化
021 res = pFilter->Init(IFILTER_INIT_APPLY_INDEX_ATTRIBUTES, 0, 0, OUT &flags);
022 if(FAILED(res)){
023 ATLTRACE("%d", res);
024 return false;
025 }
026 STAT_CHUNK chunk;
027 while(SUCCEEDED(res = pFilter->GetChunk(OUT &chunk))){
028 if(CHUNK_TEXT == chunk.flags){//テキスト
029 wchar_t buf[128];
030 ULONG bufSize = (sizeof(buf) - 1)/ sizeof(wchar_t);
031 while(SUCCEEDED(res = pFilter->GetText(&bufSize, buf))){
032 buf[bufSize] = L'\0';
033 std::cout << CW2A(buf);
034 bufSize = (sizeof(buf) - 1) / sizeof(wchar_t);
035 }
036
037 }else if(CHUNK_VALUE == chunk.flags){//プロパティ
038 }else{
039 ATLASSERT(0 != "予期せぬ値");
040 }
041 }
042 std::cout << std::endl;
043 return true;
044 }
045
046 int _tmain(int argc, _TCHAR* argv[])
047 {
048 if(argc != 2){
049 std::cerr << "引数にファイルパスを指定してください。";
050 return -1;
051 }
052
053 ::CoInitialize(NULL);
054 {
055 CT2W t2w(argv[1]);
056 execute(t2w);
057 }
058 ::CoUninitialize();
059 return 0;
060 }
061

スポンサーサイト

テーマ:Windowsプログラミング - ジャンル:コンピュータ


管理者にだけ表示を許可する
http://qnd.blog36.fc2.com/tb.php/21-f6e74951
この記事にトラックバックする(FC2ブログユーザー)
// HOME // 
シャトー・フルール・ド・ジャン・ゲイ・レゼルヴ 2001
↑これ、お気に入りのワインです
毎日ペースで飲んでる中からの
厳選(?)チョイスする予定。。
(ちなみに赤が好き)
カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
ブログ内検索

RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。