> こんにちは。下記についてご指導お願いします。
> eQSL.cc の Archive ファイルのデータ処理で 拙作の eQSL2THw の照合処理の処理時間が掛かり過ぎるので改良したいと思い対処中です。
>
> MakeIndex("C:\Hamlog\Hamlog.hdb", "CALLS+FREQ+MODE", "C:\Hamlog¥Calls_Freq_Mode.Ndx") にてインデックス・ファイルを作成。
> Calls_Freq_Mode.Ndx は作成されます。
"CALLS+FREQ+MODE" ですが、周波数は文字列としていますので、
1.9 10 1200 14 144 18 21 24 28 3.5 430 50 7
のような感じで並んでしまうと思います。
"CALLS" だけで十分では? つまり、現状のHAMLOGデータを開くだけ。
MakeIndex() を使う必要もありません。
//以下、HAMLOGのQRコード照合ルーチンからの一部引用です。
//日付時間のチェックルーチン次第ですが、
// 照合は一瞬で完了すると思います。
//ベタC言語で書いたのですが、読みづらくてすみません。
TThLog ThwinTh; //データバッファ
int rno; // レコード番号
char *lpCall = "JA2BQX";
char *lpFreq = "14"; //14MHz
if (HamlogOpen(NULL, ThwinTh, "C:\HAMLOG\HAMLOG.mst", 1)!=SUCCESS)
return -1; //ファイルオープン失敗
rno = idx_search(&ThwinTh.Ndxp[0], lpCall, 6);
// 16==Name, QTH, Rmks1, Rmks2を読み込まないので少し速いかも
while (THW_read(ThwinTh, rno, 16)==SUCCESS)
{ if (strlcmp(ThwinTh.logdt.calls, lpCall, 6)!=0)
return 0; // 違うコールになった
if ((FreqPCheck(lpFreq)==FreqPCheck(ThwinTh.Qso.Freq))
&& (日付時間のチェックルーチン呼び出し))
return 1; //照合OK!!
rno = idx_next(&ThwinTh.Ndxp[0]);}
rerurn 0; //該当コールサイン無し
//HamlogClose()も忘れずに。