Turbo Hamlog のQSLカード印刷で、新たに加わった#DoLoop ~ #EndLoop に
#Readj または #Readk を組み合わせて、複数行のQSOデータを一枚のQSLカードにまとめることが、簡単にできるようになりました。
まず上に文字が乗ってきてもつぶれないように、最初に表部分全体の「塗りつぶし」をしてから、「外枠」の罫線を描く。
当局が作成したQSOデータ表の定義の流れ(フローチャート)をご覧ください。
![イメージ 1](https://stat.ameba.jp/user_images/20191128/22/jh1lmd/86/fe/p/o0420063014652369505.png?caw=800)
次に表の最上段に各項目に合せて「表題」を並べる。
あとで述べますが、まず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データ表の定義から進めます。