恐ろしや予約語2

6月 16th, 2021 No comments

以前にもヤラレてました。過去の例

サーバー側では問題ないのに、DWRを介してjavascriptを経由すると、関連付けられたクラスが親クラスになってしまいました。

約3日ハマリましたが、結局前回同様に予約語っぽいです。

前回はgetter,setterでの命名で

staDate ◯: endDate ☓ / finDate ☓
opnDate ◯: clsDate ☓ / closeDate ☓
birthDate ☓: deathDate ◯

startDate ◯ : finishDate ◯

でしたが、今回は
Patientというクラスの要素であるorganizationとpersonで、コイツら自体には問題はありませんでしたが、このPatient君(hoge病院のhoge太郎)やMember(hoge会社のhoge太郎)といった【どこか】に所属する【何がしか】を表現するスーパークラスAssign君がいらっしゃるのです。

で、コイツ(Assign)は色々な【どこか】(party)と【何がしか】(elem)という各マスタ要素の上位クラス(Master)のフィールドを保持しているのです。

で、personを保持するgetElem,setElemは問題ないのに(javascriptではpatient.personとして捉える)、organizationを保持するgetParty,setPartyがエラーとなる(javascriptではpatient.organizationとして捉える)。

party ☓

さんざん悩んで、partyをgroupにしてもエラー

group X

elem2としたらOK

本当に予約語的なトラブルなのだろうか?よくは調べがつかないが、そのように考えざるを得ない状況ではあるので「よし」とする。

Categories: Mighty構想 Tags:

Excelのcsv出力は手強い

4月 24th, 2018 No comments

最近の開発では、データのimportやexportの機能を付けて大量の入出力を処理しますよね。

で、exportはもちろんcsv形式それもtab区切りにすればデータ内にカンマが存在しても問題なく、excelでも何でも使って利用してくださいな・・・ってことです。(データ内にtabがいるハズもないように作ってありますから)

問題はimportなんですなぁ。相手がシステムであればキレイなcsvを吐き出してくれたりしますが、問題はexcelから吐き出したcsvなのです。(タブ区切りであろうがカンマ区切りであろうが)

セル内改行なんぞというワープロちっくなレイアウトのシートでは、吐き出すと行の途中で改行されちゃいます。その実態であるLF(chr[10])を置換から「Ctrl J」で指定することで回避できるとのことですが、これで致命的な途中改行はなくなりますが、吐き出してみるとソコココに区切りじゃないタブが連打されていたりします。(どうやらコイツらはセル内改行とは無関係な感じですが)

で、clean関数を使ってやればOKなのですが、これは関数なので定型業務ではマクロか何か噛ませてやらないと、運用担当者が大変になっちゃいそうですね。

ここまでヒィーヒィー言いながらも、進めて行っても、さらに、出力ファイルをチェックすると・・・。文字列部分がダブルクォーテーションで囲まれていたり、いなかったり?意地になって色々テストしてみました。

そしたらね。フツーの文字列はそのまま出力されるんですが、文字列の中に怪しいヤツ(例えば「,」「”」がいると、勝手にダブルクォーテーションで囲んでくれているようです。

データを活かすなら取り込み時の処理で囲まれてたらハズすようなコーディングをしなければいけませんね。データの整合がさほどシビアでなければexcelのうちに「、」「”」に置換するとかね。いずれにしても手間です。

もう、ウンザリですね。

Categories: MS-Office Tags:

機種依存文字への対応

3月 29th, 2018 No comments

イエね。あるでしょ「機種依存文字」。

もちろん以前から「気をつけなさいよ」とか、自分から使わないように意識してましたよ。

で、最近はEUC-JPからUTF-8の環境になり、何やらイイ感じになってきましたヨネ。

特にご提供システムのimportデータにイワユル「丸囲み数字」(①②とかね)がありまして、しかしこれがimportされると1,2とかになってしまうんですよ。アレ?osのdefaultもD/Bの文字コードも「UTF-8」なのに何故?

import生データをjavaから表示させても①だし、D/Bのテーブルにsql文で入れても①で入るし・・・。ってことはHibernate?。JDBC?。

で、結論は.

対象となるEntityクラスのsetterでご丁寧にJava.text.Normalizerを噛ませていたコトが原因でした。変な文字入れられちゃ困ると思って噛ませたのですが、Normalizerさんの仰る通り、①は変な文字でこれって1ってコトでしょ。

色々調べていると、Normalizerは比較するときに使うベキで、データは忠実に・・・・と。納得&反省でした。

Categories: コンピュータ関連 Tags: