一括表示

こんにちは。下記についてご指導お願いします。
eQSL.cc の Archive ファイルのデータ処理で 拙作の eQSL2THw の照合処理の処理時間が掛かり過ぎるので改良したいと思い対処中です。

MakeIndex("C:\Hamlog\Hamlog.hdb", "CALLS+FREQ+MODE", "C:\Hamlog¥Calls_Freq_Mode.Ndx") にてインデックス・ファイルを作成。
Calls_Freq_Mode.Ndx は作成されます。

Hamlog.hdb をサーチしてマッチするデータを取得したいです。
Date + Time を比較してその差が+15以内なら照合OKとする。

インデックス・ファイルに該当するHamlog.hdb をデータをサーチする。
そのレコードの内容を取得したい。

2024/01/14(Sun) 17:09:55  [No.1063]


> こんにちは。下記についてご指導お願いします。
> 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()も忘れずに。

2024/01/16(Tue) 14:21:13  [No.1064]


こんばんは。ありがとうございます。

> "CALLS" だけで十分では? つまり、現状のHAMLOGデータを開くだけ。

CALLS だけの検索が早いので、その後に Band + Mode が等しければの
処理をすると言うことですね。
試して見ます。

2024/01/16(Tue) 18:55:02  [No.1065]