Headline About TechLog Download Java VBA Link

August 8, 2007.

会社と社員の話。JavaのTips。


2chに今常駐しているお客さんの会社のスレがありました。社員20名弱という会社であるにもかかわらず、元社員や現社員を名乗る人による、頭文字での罵倒や会社への不平が書いてありました。書いている人が予想できてしまうのですが...。書かれている人もスレの存在に気づいている様子だし。うーん。

ちなみに2chの会社格付けによるとbaristaの所属する会社は、地方へっぽこ大学出としてまぁ、ぎりぎり許せるランクだそうな。転職前の会社はずっと最低ランク。「転職も無理な人生終わった企業」らしいです。運よく転職できましたけど(汗)。

確かに前の会社は基本給、社員レベル、プロジェクト運用は最低レベルでした。しかし、自分にとっては特に厳しい会社ではありませんでした。「基本情報技術者の資格を取らないと叩かれる」という会社であったが故に、ソフトウェア開発技術者を取った時点から人事考課の評価はほぼ最高点をつけてもらってましたし。いや、もちろん客先からの評価も良かったからですけど。社員の平均レベルが低ければ、まともに仕事をしているだけで評価が高く、発言力も変わります。6年間上司に怒られたことはありません。殆ど定時で帰っていましたし。

残業代の無制限につく会社でしたが、baristaは殆どの月で残業が10h未満でした。結果、基本給が安いため「残業少ない人 < 多い人」という給与配分に不満を覚え転職しましたが、特に前の会社を恨む気にはなれません。教育学部卒でプログラムを組んだことの無い、大学院出の年寄りを採用してもらい、成長の機会を与えてくれたわけですから。

ってなわけで、会社と社員って金銭による契約関係にあるわけで、いわゆる「愛社心」なんて不要だと思うのと同時に「憎社心」も不要ではないのか、と思うわけです。給与が安くても仕事がヒマ、あるいは楽しい、場所が近いなどの利益があり、心の損得がつりあえば契約関係を維持すればよく、つりあわなければ破棄すればいいわけです。「入ってみたら酷い待遇」と嘆く人たちは、リサーチ能力が低いからそれだけの待遇なのではないでしょうか。憎社心を抱くよりは転職するか、過去の自分の情報活用能力の低さを反省すべきでしょう。これからの時代、情報は探せば見つかるものですから。

偉そうに言っていますが、そんな考え方になったのは転職に踏み切ってからです。人間一度や二度は転職してみた方がいいかもしれませんね。今の会社は...うーん、また残業が少なすぎて給与は少なめだけれど...楽なんだよねぇ(笑)。これで通勤時間が半分なら文句は無いのですが、どうしたものでしょうね。

 

 

仕事でCSVデータの解析ツールを作成しました。Excel VBAで作りかけたものの、時間がもったいなかったため結局Javaで作りました。納品物ではなく、日々の保守業務用なので、動けば何でも良いのです。別にExcel VBAが悪いわけではないのですが、MSDN等マイクロソフトのAPIリファレンスは読みにくいと思います。JavaDocはその点非常に理解しやすい。無論Java歴が長いせいかも知れませんが。

Fileオープンダイアログに関しては昨日VB版を書いたところなので、対比としてJava版を書いておきましょうか。以下のコードは複数ファイルを読む例です。

 

JFileChooser chooser = new JFileChooser();

chooser.setMultiSelectionEnabled(true);

int result = chooser.showOpenDialog(this);

if (result == JFileChooser.APPROVE_OPTION) {

  File[] files = chooser.getSelectedFiles();

  // ここにfilesを使った読み取り処理

}

 

こんな感じです。成功・失敗は戻り値のbooleanで行い、JFileChooserのインスタンスから、選択していたファイル名をオンデマンドで取得に行くわけです。で、次にFileからデータを読みこみます。Javaでテキストファイルなどを読み込む場合、BufferedReaderで結果がnullになるまでreadLineします。こんな感じ。

 

BufferedReader br = new BufferedReader(new FileReader(file));

String aLine = br.readLine();

while(aLine != null) {

  // aLineに対する処理

  aLine = br.readLine();

}

 

で、最後にCSVをカンマで分割します。昔はStringTokenizerを使っていたのですが、今は非推奨クラスになったらしいです。まぁ、使いにくかったしなぁ。今(JRE 1.4以降)はsplitメソッドを使うのが手軽です。

 

String[] data = aLine.split(",");

 

こんだけ。StringTokenizerとの違いは空データをちゃんと返してくれること。例えば、"aaa,bbb,,ddd,eee"というデータをStringTokenizer#nextToken()で処理すると、結果的には、{"aaa", "bbb", "ddd", "eee"}というデータを取得することになります(配列ではなく各要素を順に取得するわけですが)。一方、String#split()なら{"aaa", "bbb", "", "ddd", "eee"}を配列で返してくれます。

ってなわけでデータのリードは一瞬で完了です。分析の実装は結局for文で回して、フラグ立てたり戻したりしてと非常に面倒でしたけどね...。

 

 

最後に、無駄に長い日記を読ませたお詫びに、Javaで非常に簡単にファイル出力を実現する方法をお教えしましょう。これはそのうちTipsに掲載しますね。

 

// これを一度どこかで呼んでおく。

System.setOut(new PrintStream(new FileOutputStream("data.txt")));

// 以降はprintするだけでファイルに書き出される

Sysatem.out.println("出力文字列");

 

こんだけ。setErr()ってのもあります。Javaを長くやってる人も意外と知らない機能です。main()内などで一度setOut()を呼んでおけばVMが死ぬまで、全クラスで有効です。ログ機能を実装する気は無いけど、今だけ欲しい、なんて時には非常〜〜に便利なので活用してくださいませ。昔Storageが使えない携帯端末のデバッグで、FileOutputStreamの代わりにSocket通信へのOutputStreamを接続して、リモートにログを送るなんて利用をしたこともあります。ただしアプリが終了するまでファイルを開きっぱなしなので、まじめな実装には向きません。ではでは。


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


August, 2007
SUN MON TUS WED TUR FRI SAT
1234
567891011
12131415161718
19202122232425
262728293031