Turbo Hamlog のQSLカード印刷で、新たに加わった#DoLoop#EndLoop に
#Readj または #Readk を組み合わせて、複数行のQSOデータを一枚のQSLカードにまとめることが、簡単にできるようになりました。

当局が作成したQSOデータ表の定義の流れ(フローチャート)をご覧ください。

イメージ 1まず上に文字が乗ってきてもつぶれないように、最初に表部分全体の「塗りつぶし」をしてから、「外枠」の罫線を描く。
次に表の最上段に各項目に合せて「表題」を並べる。

あとで述べますが、まず1行分のQSOデータを印字してから、ループ(繰返し)に入る。
ループに入るとQSOしたコールを確認して、同じコールでなければ終了に飛ぶ。(ジャンプ)

同じコールであれば、そのQSOデータを2行目に印字する。
表の印字が5行目まで達していなければ、ループの上に戻って、次のQSOデータに移動する。

再びチェックして、同じコールでなければ終了に飛ん(ジャンプ)で、QSOデータの件数などのまとめを印字して、無事終了となる。

当初は、1行目だけを先に印字せずに、「QSOデータ1行分を印字」した後で「次のQSOデータに移動」を行っていた。
これでも5行目までは普通に印字したが、まとめに「End of QSO-DATA(6)」とQSOの件数が1個多く出てきた。

更に5件以上QSOデータが有った場合は、次のQSLカードに6行目から印字されるはずが、7行目から始まってしまうことが判明した。つまりこんな感じ。

----同一局あて1枚目のQSL----
ループ開始
1行目
←次のQSOに移動してコールを確認
2行目
←次のQSOに移動してコールを確認
3行目
←次のQSOに移動してコールを確認
4行目
←次のQSOに移動してコールを確認
5行目
←次のQSOに移動してコールを確認
6行目
----同一局あて2枚目のQSL----
ループ開始
7行目
←次のQSOに移動してコールを確認
8行目
←次のQSOに移動してコールを確認
 ・
 ・

結果として、各QSLの最初の1行目をループに入る前に印字して、2行目からループに入る方法で、またループの冒頭でコールの確認を行うことで解決した。

----同一局あて1枚目のQSL----
1行目
ループ開始
←次のQSOに移動してコールを確認
2行目
←次のQSOに移動してコールを確認
3行目
←次のQSOに移動してコールを確認
4行目
←次のQSOに移動してコールを確認
5行目
←次のQSOに移動してコールを確認
----同一局あて2枚目のQSL----
6行目
ループ開始
←次のQSOに移動してコールを確認
7行目
←次のQSOに移動してコールを確認
8行目
←次のQSOに移動してコールを確認
 ・
 ・

この事に気が付くまで、結構、時間を費やしました。すべての行をループに入れたかった訳(こだわり)は、主に同じ定義を2回繰り返す点がイヤだった。
このQSOデータの印字では、条件命令を多用しているので、1回分でもボリュームが相当に膨らんでしまったのです。

どうしても2回の繰返しが不可避なようで、最終的には1行分の処理を別ファイルにして、複数回 #Load (別の定義ファイルを読み込む)の命令で使うことにした。
いわば、一般的なプログラムの「サブルーチン」のようなもので、長い定義は1回書けば良く、結果として修正もしやすくなった。

さて#DoLoop#EndLoop の方針が決まったところで、チェック方法によって
#Readj #Readk のどちらを使うか? を決めなければならない。

いずれも相手局のコールサインをチェックするのだが、#Readj は、QSL転送の先のコールを確認するので、複数のDX局のQSLマネージャーを引き受けている局があるとすれば、QSOデータが一緒にまとめて印字されてしまう。

当局は、DX局ごとにまとめたかったので、#Readk を使った。これは実際にQSOを行った、入力画面の「Call」覧が一致した分だけをチェックするので、QSLマネージャーが一緒でも、別々にまとめてくれる。

国内の相手局は、入力画面の「Call」覧にポータブルが付いても、#Readk の場合でまとめてくれるので心配はないようです。

次回は、1行分の処理を別ファイルにした、外付け?「サブルーチン」を除いた、ご本尊のQSOデータ表の定義から進めます。