• ベストアンサー

perl初心者です。

すみません、xmlファイルからCSVファイルに変換するプログラムを作成しなくてはいけないのですが、 perlを1からあまり書いた事がないので イメージがわきません。 何か参考になるページをネットで探してるのですが、 どなたか参考になりそうなHPをご存じでしたら URLを教えていただけると助かります。

  • rariko
  • お礼率28% (223/790)
  • Perl
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

XML ファイルの各 item 行が 1 行、各 name の現れる順が毎回同じ、かつ value にカンマ、クウォートなどが含まれないなら、$line に各行を読み込めば、単純に以下で $train にカンマ区切りの文字列ができ上がります: if ($line =~ /<item name="(.+)"><value>(.*)<\/value><\/item>/) { $train .= $2 . ","; } 場合によって現れない name がある、item の順が異なる場合があるなどの場合は、コードを追加しなければなりません。

rariko
質問者

お礼

再度回答ありがとうございました。 参考にさていただきます。

その他の回答 (3)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.4

DTD がどう定義しているかにもよりますが、サンプルを見る限りでは、<item>の下の<value> の中が、CDATA だけではなく、もう一度<item>が現れる入れ子になっているので、単純なCSVには吐き出しにくいと思います。 perlでなくていいなら、MS Excel で「読取専用BOOKとして開く」で開けば、適当なスキームで強引に解釈して表にしてくれるので、それをCSV で書き出してやれば、一応CSV にはなります。

rariko
質問者

お礼

回答ありがとうございました。 いちおーperlでという指示があったので・・ 勉強がてら頑張ってみます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

XML::Simple と Text::CSV を使う。 後者はCPANから持ってくる必要がありますが、前者は多分 Perlがインストールされていれば標準で入っているかと。 自分でごりごり書くよりはモジュールを活用しましょう。 使い方の説明は、モジュールをインストールすれば perldoc XML::Simple perldoc TEXT::CSV で読むことができます。 CSV→XMLならXML::CSVというそのものずばりのモジュールがあるんですが。処理速度的には自分で正規表現を書いてしまったほうが早いようですが、 Perl初心者でそれをやるのは厳しい気もするし、メンテも大変なので その辺はバランスを考えて決めるとよいでしょう。

参考URL:
http://www.affrc.go.jp/ja/rss/csv2rss.html
rariko
質問者

お礼

ご回答ありがとうございました。 参考にさせていただきます。

回答No.1

Perl は文字列処理に優れているので、こういったテキスト変換は簡単ではないかと思ってしまうのですが、実は単純だと思える CSV のほうに (特有の問題を露呈しないための) 決まりが結構いろいろあります: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#FileFormat 「問題はそこではない!」という場合は、また返答願います。 http://www.w3.org/XML/

rariko
質問者

補足

回答ありがとうございます。 えっと具体的には 以下の内容みたいなXMLファイルを valueの値をそれぞれ取得してCSVに出力する・・・ という事なんですが、、まずファイルを1行ずつ読み込んで 正規表現等使用してCSVファイルに出力する内容を 編集して、出力・・・みたいになるのかなぁと。 それで、何か参考になるプログラムはないかなぁと思いまして。 すみません、本当にperl初心者なもので・・・。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE record SYSTEM "dcr4.5.dtd"> <record name="sample_dcr_full_input" type="content"><item name="fa_office"><value> <item name="output_path_memo_01"><value>htdocs/office/fa/kantou/atsugi.html</value> </item> <item name="output_path_memo_02"><value>data/kanto</value></item> <item name="is_shown"><value>1</value></item> <item name="office_name"><value>厚木支店</value></item> <item name="post_code"><value>243-0018</value></item> <item name="address_1"><value>神奈川県厚木市中町2-2-20</value></item> <item name="address_2"><value>小田急線本厚木駅北口・有隣堂前</value></item> <item name="phone_number"><value>(046)224-8666</value></item> <item name="phone_comment"><value></value></item> <item name="fair_info"> <value> <item name="left"> <value> <item name="date"><value>2006-06-17</value></item> <item name="start"><value>午前</value></item> <item name="s_hour"><value>10</value></item> <item name="s_min"><value>00</value></item> <item name="finish"/> <item name="f_hour"/> <item name="f_min"/> </value> </item> <item name="notice"><value>説明会場は4階です。エレベーターで直接お越しください。</value></item> <item name="map_alt"><value>地図画像(厚木支店)</value></item> <item name="map_comment"><value>地図コメントはHTMLに表示されませんが、注意事項と同様に入力可狽ナす。</value></item> </value></item></record>

関連するQ&A

  • PerlでCSVファイルからRSS対応のXMLファイル(UTF-8フォーマット)を作成する方法を教えて下さい。

    初めてOKWebを使わせて頂きます。よろしくお願い致します。 社内でホームページを作成しており、新着情報などはCSVファイル(日付、タイトル、内容、URLなどが一行に記載されたもの)を元にPerlプログラムでホームページに表示するようにしています。 このCSVファイルを使って、RSS対応のXMLファイルを生成したくPerlでCSVファイルからXMLファイルを作成するプログラムを記述してみたのですが、作成後、UTF-8フォーマットでファイルを保存する方法がわかりません(現在はShift-JISになっていると思います)。 ファイルをUTF-8に変換し保存するPerlの記述方法がわかりましたらお教えください。 尚、環境は以下となります。 OS:Windows2000Server Web:IIS5.0 ソフト:ActivePerl5.6 他の人が作ったPerlプログラムもあり、できればこの環境(Versionなど)は変えずできると嬉しいです。Perl初心者ですので、できれば具体的な記述方法をお教え頂ければとても助かります。申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlでのcsvファイルの比較・上書き

    はじめまして、今回初めて質問させていただきます。 今、perlでAとBという2つのCSVファイルを比較して、マッチしない箇所がある場合はAの情報がBに上書きされるというスクリプトを作成しようとしています。 OPEN関数と比較演算子を利用するのはわかっているのですが、上書きさせる方法がわかりません... ネットで調べたりしたのですが、参考になるHPがなかなか見つからなかったので、こちらに質問させていただきました。 サンプルとなるプログラムやHP等を教えていただければ、勉強になりますのでとても助かります。 よろしくお願いします。 追記 Bのcsvファイルには住所録情報が格納されておりまして、AのcsvファイルにはBの住所録情報の中から変更箇所がある新しい住所録情報が格納されております。

  • Perlでファイルの存在確認をするには

    Perlでプログラムを作成しています。 ご教授願いたいのですが、CSVファイルから一つずつファイルパスを抜き出して、 データベース上のファイルの有無を確認するには、どのような組み方を したらよいでしょうか?

    • 締切済み
    • CGI
  • 本を探しています(XMLをPerlで文字取得編集)

    お世話になります。 XMLファイル(DTDファイルも別途有ります)を、 出来ればPerlで、 XSLT(XSLの変換機能)等を利用して、 文字取得・編集したいです。 (XMLから文字を取得して、Perl等で文字編集後、  別のテキストファイルとして出力したいです) そのような内容が掲載されている本を Amazonのレビュー等を参考にしながら探しているのですが、 なかなか見つけることが出来ません。 できればPerlがよいのですが、なければ、 Perl以外の別のプログラム言語でも構いませんので、 お勧めの本(もしくはWebサイト等)などございましたら、 ぜひ紹介してください。 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • Perl+HTMLホームページビルダー的な物を探しています。

    最近Perlを勉強している物です。 元はホームページから勉強を初めて、Perlと出会い、勉強するようになりました。 一つ大変な事はPerlで動的なページを作成し、それをデザイン的に凝ったページに仕上げようとした場合です。 私の方法は次のような作業です。 (1)HTMLをHPビルダーなどを使用し作成する (2)Perlをプログラム的に解りやすいエディタを使い作成する (3)(1)で作成したHTMLをコピーし、Perlで作成されたページに張り付け最終的な調整をして完成 となっています。 ホームページビルダーのようにHTMLをすぐに表示確認できる、プラスPerlが一緒に組み込まれていても表示できるようなソフトはあるのでしょうか?どうかご存知の方は教えて頂けないでしょうか お願いします。

  • Perl初心者です。文字化けについて

    プログラムの知識がほとんどないので、質問に足りないところがありましたら申し訳ありません。 Perlで書かれた、XMLを読み込むツールがあります。 XML上では文字化けしていないのに、ツールで読み込むと文字化けしてエラーになってしまいます。 Inputファイル(XML)とOutputファイル(エラーログ)の文字データを比較すると、文字化けしている文字の1バイト目がなくなっていることがわかります。 このような場合の対処方法がありましたら、教えてください。 私がツールの中身を理解できておらず、何か必要な情報などがありましたら、ご指摘ください。 宜しくお願いします。

  • PerlでXMLのフィルタリング

    いつもお世話になっております。Perl初心者です。 以下のサイトを参考に、XML::Parser::PerlSAX を使用して、XMLファイルをフィルタリングするプログラムを作成しようと考えています。 http://mkweb.bcgsc.ca/intranet/perlbook/pxml/ch05_01.htm ここで、ある要素のある属性の、異なる属性値ごとに、文字データイベントを処理する方法を変えたいのですが、どのようにすればよいでしょうか。 各種SAXイベントハンドラも、XML::Handler::Subs も考えましたが、何を使えばよいか検討がつきません。よろしくお願いします。

  • perlの初心者本買ってきたものの・・・

    つい最近perlに手を付けて、非常に手こずっています。何に手こずっているかも申しますと、ほんの通りにプログラムを書いてもうまく動作しないことです。本は「Perl/CGI超入門」(藤森○絵)筆です。入力フォームのボタンをクリックしてもWEBページ(localhost)が「開くことができません」とでます。HTML、○.plどちらも指定したフォルダに入っています。HTMLのページは入力フォームですがちゃんとWEBに出ます。でも、フォームの中の文字列を取得してCGIのページになると表示されません。perlはCygwin,Activperlとも試してみました。CGIのページに跳んだときのURLは本に書いているURLと同じくでます。 著者へ質問できるようなアドレスも無く、技術評論者に質問できるようなページもないので、なすすべ無しといったところです。私のPCの設定に問題があるのかもと思い、インターネットセキュリティーソフトをおアンインストールしてみましたが同じでした。内心、これを超初心者として出版しているのであれば、本当に初心者のものは皆頭にきてしょうがないだろうなというのが本音です。perl自体の言語で引っかかっているのではなく、サンプルプログラムが動作しない(コピペで)。どなたか同じ本を買った方で、原因が分かるか方おりませんでしょうか。

    • ベストアンサー
    • Perl
  • perlで特定のデータを書き出す方法

    perlは何個かプログラムを作ったことがあるのですが、 本当に単純なものしか作ったことがない初心者です。 CSVを読み込んで、そのCSVを元に、あるURLにアクセスし、 そこで取得した特定のデータを書き出すということを行いたいのですが、 どのようにしたら実現できるのでしょうか。 お手数ですがご教授ください。 ---------------- 【持っているCSVデータ】   A  |   B  |  C    |   1  | テキスト|テキストxxx|   2  | テキスト|テキストyyy|   3  | テキスト|テキストzzz| 【1行づつ以下のようなURLにアクセス】 http://www.abcd/テキストxxx 【表示されると以下のようなXMLが返ってくる】 <result> <version>1</version> <text>タイトル</text> <coordinate> <main_id>14231245234</main_id> <div>テキストテキストテキスト</div> </coordinate> <needs_to_verify>yes</needs_to_verify> </result> ↑ 1行づつCSVを読み込んで、 ここのmain_idを一行づつテキストデータに書き出したい。 ---------------- perl でファイルを読み込んだり書き出したりすることは出来るのですが、 URLにアクセスして、 特定のタグに含まれるもののみを書き出すというやり方がわかりません。。 お手数ですがどうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 純Perl製のXMLパーサーはありませんか

    horagaiです。お世話になっております。 PerlでXMLファイルを処理する必要があり、Perlで使えるXMLパーサーを探してみたところ、XMLParserというそのものずばりの名前のモジュールがあることがわかりました。 しかし、これはXMLパーサー本体ではなく、expatというC言語で書かれたXMLパーサーを利用するためのインターフェイスらしいです。それに私は無料ホームページスペースで使いたいので、コンパイルの必要なモジュールは利用できません。 Perlだけで使える(expatのようなPerl以外で書かれた非標準的外部プログラムを必要としない)XML処理用のライブラリー(モジュールではなくパッケージ)をご存知ないでしょうか。 出来れば日本語も処理できる(それもUnicodeだけでなくEUC-JPやShift-JISのファイルも)ようなものが望ましいです。 Perlはテキスト処理が得意なので、Perlで書かれたXMLパーサーは当然あると思っていたのですがどうも見つかりません。 なお利用目的としてはデータ構造を取り出すと言うよりも単にXMLデータをHTMLに直したいだけなので、別にXMLパーサーでなくてもそのような目的に使えるようなパッケージであればそれでも構いません。 なおCPANも一応はチェックして見ましたが見つかりませんでした。(もちろん見落としはあるかも知れませんが) よろしくお願いします。

    • 締切済み
    • XML

専門家に質問してみよう