Denemoというソフトが出力した .denemo ファイルを読み書きしたいのです。
.denemo ファイルは MusicXML という形式のようなのですが、バイナリファイルなのでどのように扱えば良いのかわからず質問しました。
XML parser というものが関係あるようなのですが、よくわかりません。
まずは、バイナリ形式のXMLをテキスト形式で読みたい。
次に、バイナリ形式のXMLをプログラム(C++)で操作して読み書きしたい。
と、思っています。
OS は Windows XP で、コンパイラは g++ を使用しています。
よろしくお願いいたします_(_ _)_
No.1ベストアンサー
- 回答日時:
>MusicXML という形式のようなのですが、バイナリファイルなので
譜面をXMLで記述しているだけで、ただのXMLファイルだと思います。
>まずは、バイナリ形式のXMLをテキスト形式で読みたい。
そもそも、XMLは文字コードを意識しているのですべてテキストで記述されます。つまり、XMLという時点でテキストファイルです。
ということで。
>バイナリ形式のXMLをプログラム(C++)で操作して読み書きしたい。
WindowsにはMSXMLと呼ばれるXMLパーサがIEやOfiiceなどに入っています。IEがほぼ標準で入っているので、最近のWindowsマシンにはほぼ入っているでしょう。COMを使用しているので、少し面倒。
MS.NetにはSystemXMLというXMLパーサがあります。
C++なら後者のほうがいいかもしれません。
No.6
- 回答日時:
実証する環境がないので心苦しいのですが、
ググッてみたところ、
「(たぶんwin環境において)xmlSaveFormatFile()関数使うと
出力xmlファイルがバイナリになる」
という投稿
http://www.mail-archive.com/xml@gnome.org/msg044 …
を見つけました。
英語力がイマイチ足りないので、この投稿の、この後の
質問者と回答者のたどった経緯がはっきりつかめないのですが。
最終的に解決したっぽい?
---
ここで取り上げられているxmlSaveFormatFile()関数というのは、
libxml(というライブラリ)のAPIみたいです。
http://xmlsoft.planetmirror.com/html/libxml-tree …
---
Denemoのソースコードを(ググッて)見てみたのですが、
Denemoで「Denemo XML Format」を選択して
XMLファイル出力しようとすると、
最終的に(libxmlの)xmlSaveFile()関数が呼ばれる・・・
・・・ような気がするのですが。
---
Denemoの「ファイル出力GUI」部分と思われるソースコード。
gtkフレームワークを知らないので、
これまた全くのカンなのですが。
http://www.koders.com/cpp/fid2948DB0B5120E3FD609 …
(filesel_save()周辺)
かなり突っ込んで調べていただきありがとうございます。
Denemoのメーリングリストにメールを出したのですが、ちょうど今返事を
もらえました。
結局、DenemoはXMLをgzipしてから出力しているということがわかりました。
Denemo XML Formatファイルをgunzipするとテキスト形式のXML
(らしきもの。まだ中身をちゃんと見ていません。)になりました。
さらに、gunzipしたものを再びgzipするとDenemoで読み込むことができました。
しかし、ソースコードの中まで読むなんてすごいですね。
私はちょっとそこまではできないです(^^;
これで表題の「バイナリ形式のXMLファイルを読み書きしたい」は
解決しましたので締めたいと思います。
皆さんのご援助に感謝します!!ありがとうございました!
No.5
- 回答日時:
>Denemo が出力した .denemo ファイル
MusicXMLを独自にバイナリ化したんだとしたら困難ですね。
普通ツールは互換性のために他のソフトとやり取りするファイルを出力できたりしますが、MusicXML形式では書き出せないんでしょうか?
>XML parser というのはテキスト形式で書かれた XML ファイルを読み込んで、プログラムが扱いやすい形に変換
ほぼ、その認識であってます。
パーサーは構文解析という意味で、よく使われるのは言語のインタプリタやコンパイルの構文解析ですね。
エレメント(タグ)の意味解析などは結局自分でやるしかないので、けっこう面倒だったりします。
この回答への補足
Denemo の保存ダイアログでは Denemo XML Format を選択して保存しています。
Denemo のホームページには「他のソフトと互換性を保つために MusicXML を
サポートしている」と書いてあるので、Denemo XML Format が MusicXML では
ないかと考えているのですが。。。
しかし、.denemo ファイルがバイナリ形式だということは違うのかもしれません。
このへんのことをフォーラムで質問してみようかと思います。
(初めて「教えて!goo」を利用していますが、予想外に回答が来るので
うれしい驚きです。回答してくださる皆さんに感謝!!)
No.4
- 回答日時:
.denemoファイルがバイナリファイルであればそれはMusicXMLではないということになります。
バイナリの解析はファイルフォーマット等の情報がないと無理でしょう。
この回答への補足
php504さんありがとうございます!
やはりバイナリファイルであれば、XML ではないのですね。。。
Denemo はもともと UNIX/Linux 用ソフトのようなので、Windowsで実行して
いるために出力ファイルが文字化けすることがあるのかな、とも思ったのですが。
バイナリファイルであるということは、php504さんが言われたように開発元の
ファイルフォーマット情報がないとダメですよね。
Denemo のフォーラムに投稿してみます。(英語かぁ。。。頑張るしかない!!)
No.3
- 回答日時:
ただのテキストじゃないでしょうか?
http://ja.wikipedia.org/wiki/MusicXML
開発環境がcygwinのようなので、GPLライセンスでかまわなければかなりありますよ。
http://www.nbrains.net/php/pukiwiki/index.php?li …
都合よく日本語なのは数少ないと思いますが、MiXとか少しはあります。
この回答への補足
aris_wizさん、zwiさん、早速の回答ありがとうございます!!
ただ説明がまずかったようで、Denemo が出力した .denemo ファイルは
テキストエディタで開こうとしても文字化けし、バイナリエディタで
開いても中身の意味がわかりません。
Denemo のホームページを見ると MusicXML で出力していると書かれて
いたのですが(英語なので確かではありませんが。。。)、
お二人の言われたように XML は本来テキストで書かれるべきものですよね。
それで、XML をバイナリで記述することもあるのかな、と思った次第です。
基本的な質問に戻りますが、XML parser というのはテキスト形式で
書かれた XML ファイルを読み込んで、プログラムが扱いやすい形に変換
(というか解釈)するもの、ということであっているでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- その他(パソコン・周辺機器) Windows10パソコンで再生している音をWAVファイルとして録音、保存する方法は? 4 2023/06/15 18:34
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) 【python】Excelファイルを読み込む際の日付の表示形式を任意にする 2 2022/11/24 14:21
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- その他(動画サービス) YMM4 で MOV ファイルが読み込まれているがプレビューされない 2 2022/07/25 18:36
- Excel(エクセル) ドキュメントに保存していたエクセルのファイルが開きません。 2 2022/12/02 09:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
入力ファイルをバイナリにする利点
-
bitmap画像の保存がうまくいき...
-
読み込んだファイル
-
EXCEL VBAでテキストファイルの...
-
FTPでエクセルをPUTするとファ...
-
VBA バイナリ―から文字列にす...
-
awkの文字列比較はPOSIXロケー...
-
C言語でBMPファイルの内容を表...
-
ページ読み込み時に自動的にsub...
-
バイナリを16進数で表示したい
-
バイナリファイルの比較につい...
-
画像の保存方法。
-
【Teraterm】filewritelnについて
-
テキストデータをSQLServerに取...
-
VBAでバイト型データをファイル...
-
双方向リストへのデータ登録
-
バイナリーデータの一部データ...
-
RandomAccessFile文字列の上書き
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
エラー:ストリームの終わりを...
-
EOF
-
テキストデータをSQLServerに取...
-
MacからWinにファイルを添付す...
-
バイナリエディタのつかいかた
-
リストビュー ⇔ 別ファイル構...
-
入力ファイルをバイナリにする利点
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
VB2010 COMポートからのバイナ...
-
バイナリ形式のXMLファイルを読...
-
JavaScriptの実行速度が遅い
-
バッファサイズについて
おすすめ情報