お知らせ

  • シスキュー技術部

Btrieveのファイルを開きたい

noimage

Btrieveのファイルを開きたい

Btrieve(ビートリーブ)とは1990年代に、パソコンを使ったクライアント/サーバシステムのデーターベースとしてよく使われていました。 このBtrieve自体は、現在OracleやMS-SQLServerなどRDBMS(リレーショナル型データベース)全盛の時代では、あまりメジャーな存在ではなくなりつつありますが、現在でもPervasive PSQLとして製品ラインは続いています。 このBtreiveをPervasive PSQLにリプレースする場合、同じデータベースファイルをそのままに使えるので、移行には手間はかからないようです。 Pervasive PSQL製品版を持っていない場合は、このファイルを開くことができません。 ファイルの中を見ると、おそらく固定長のファイルであることは、わかるのですが、データベースがどういう定義で保存されているのかわからない場合、データを紐解くことは難しいです。 Accessもバージョン2.0の時代はBtrieveのデータベースを開く機能もあったようですが、2013年の現在Access2.0のソフト本体も、動く環境もそろえることは難しくなっています。 これを読み取るものがないものか、ネットを探してみたところ、オープンソースのソフトウェアでBtrieveFileSaverというものを見つけることができました。 これはBtrieveやPervasiveのランタイムやライブラリは必要とせずに動作するもののようです。 BtrieveFileSaver http://sourceforge.net/projects/btrievefilesave/ リポジトリを見ますと、VisualC++.netで開発されたソフトウェアです。 最新版をダウンロードすると、windows形式のexeがいくつか展開されます。 readme.txtとliesmich.txt(ドイツ語でライセンス)をよく読んで利用してください。 Visual_btrieve_file_saver_trial_en(de).exeは、トライアルバージョンのようで、GUIで操作できますが5件までの出力に、限られているようです。 コマンドライン版のBTrieveFileSaver.exeをコマンドプロンプトを利用して、実行します。 利用方法は、 [text] BtrieveFileSaver –brtin data.dat –brtout data.dat.dmp –format 1 [/text] のようにして利用します。 -brtinには読み込み元のBtrieveのファイル、-brtoutには出力先ファイル名を指定します。 -formatオプションは 1 BUTIL(Btrieveのコマンドラインユーティリティー)形式での出力です。先頭にレコード長、レコード区切りはCR+LFで出力されるようです。 2 BUTIL形式から、レコード長を取り除いた形式のようです。 3 HEX DUMP(16進ダンプ)をテキスト形式で出力します。CRCということはチェックサムが付加されているものかもしれません。ファイルサイズとしては、一番大きくなります。 4.HEX DUMP(16進ダンプ)をテキスト形式で出力します。 上記の4つのオプションを使用することができます。 実行すると1レコードごとに処理ログが出力されます。 改行区切りはCR+LFなので、メモ帳などで読むと、テキストフィールドはかなりきれいに並んだ状態で読めます。 またレコード長などもはっきりしますので、実際のデータのプリンタ出力やバイナリエディタと合わせて使えば、レコード定義を理解することもできそうです。 Btrieve形式のデータベースを、サードパーティーのアプリで開くものもなかなか見つかりませんので、このようなソフトウェアを利用するのも、方法の一つかもしれません。

  • シスキュー技術部

Java備忘録① ~ファイル入出力と文字コード~

noimage

Java備忘録① ~ファイル入出力と文字コード~

「FileWriter」というテキストをファイルに書き出すクラスがあります。 Java初心者の僕は、なんとな~くこの「FileWriter」を使っていました。 それで問題なく動いていたからです。 が・・・。 この「FileWriter」、出力するファイルの文字コードセット指定ができないんですね~。 というか、OSのデフォルトのエンコード方式で自動変換されてしまいます。 文字コードを意識しないでいいという点は、一見便利なようにも思えますが、 かえって問題を引き起こす原因にもなりかねませんな~。 なので、普段から文字コードを意識してコーディングする方がよさそうですね。 というわけで、文字コードを指定する場合は、 「FileWriter」の代わりに「OutputStreamWriter」を使用するといいでしょう。 [java] // FileOutputStreamオブジェクト生成(出力ファイルの指定) FileOutputStream fo = new FileOutputStream("file.txt"); // OutputStreamWriterオブジェクト生成(文字コードの指定) OutputStreamWriter ow = new OutputStreamWriter(fo, "UTF-8"); // 書き出す内容をセット ow.write("Hello Work!!"); // ストリームの解放 ow.close(); fo.close(); [/java] こんな感じでしょうか。 ちなみに、「FileWriter」と同じようにファイル読み込み手続きを簡略化した 「FileReader」というクラスも文字コードが指定できません。 代わりに「InputStreamWriter」を使って云々かんぬんする必要があるワケですが・・・。 ま、便利なのも考えモノですね~、という初心者の感想ですです。 というわけで、今回はこれにて失礼。