タイトル
記事No
投稿日
投稿者
: MakeIndex で作成したインデックスファイルで検索・照合
: 1063
: 2024/01/14(Sun) 17:09:55
: JA2BQX 太田
こんにちは。下記についてご指導お願いします。
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 をデータをサーチする。
そのレコードの内容を取得したい。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: MakeIndex で作成したインデックスファイルで検索・照合
: 1064
: 2024/01/16(Tue) 14:21:13
: JG1MOU浜田
> こんにちは。下記についてご指導お願いします。
> 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()も忘れずに。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: MakeIndex で作成したインデックスファイルで検索・照合
: 1065
: 2024/01/16(Tue) 18:55:02
: JA2BQX 太田
こんばんは。ありがとうございます。
> "CALLS" だけで十分では? つまり、現状のHAMLOGデータを開くだけ。
CALLS だけの検索が早いので、その後に Band + Mode が等しければの
処理をすると言うことですね。
試して見ます。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!