• ベストアンサー

Perlでのファイルリスト作成

Perlで、ファイルリストを作成したいのですが、あるディレクトリにあるファイル(.htm)からファイル名、フルパス、<title>タグのタイトル部分をはきだす方法を教えてください。

  • Perl
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • danmarino
  • ベストアンサー率63% (26/41)
回答No.2

> 指定したディレクトリのサブディレクトリもリストの対象にするにはどうしたらよいでしょうか? opendir/readdirでは指定したディレクトリ内のファイルだけでなくサブディレクトリの名前も取得してくれます。 > (3)で、<title>と</title>の間を読み取る正規表現について、ご教授願います。 正規表現が得意でないなら使わずにすむ方法もあります(工夫次第です)。 たとえば取得したHTML全文をひとつの変数に格納し、<TITLE>と</TITLE>で順にsplitしてあげれば<TITLE>と</TITLE>の間だけ抜き出せます。タグの大文字小文字(<TITLE>と<title>)を考慮してあげる必要があります(正規表現の場合も同様ですね)。

ymmthrs
質問者

お礼

早急な回答ありがとうございます。 参考にさせてもらいます。 早速、アドバイスどおりやってみたいと思います。 ありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

再帰的になにかするのであれば File::Find とか find.pl なども使えるかも.

  • danmarino
  • ベストアンサー率63% (26/41)
回答No.1

微妙にどのようなスクリプトを書きたいのかが伝わらないのですが… (1)ディレクトリにあるファイルのリストを作成するには opendir(DIR,"ディレクトリ"); @fnames = grep(!/^\./,readdir(DIR)); close DIR; (2)ファイルのフルバスは環境変数$ENV{'DOCUMENT_URI'}で取得 ※但し、htmlファイルから見てということになります (1)でディレクトリを指定しているのならフルパスはわかっているのでは? (3)<title>タグのタイトル部分を取得するには (1)で取得したファイルのリストを使ってファイルを一つ一つオープンし、<title>と</title>の間を読み取ってあげる

ymmthrs
質問者

補足

danmarino さん また質問で申し訳ないですが、 指定したディレクトリのサブディレクトリもリストの対象にするにはどうしたらよいでしょうか? (3)で、<title>と</title>の間を読み取る正規表現について、ご教授願います。正規表現が得意ではないので、もしよろしければ、サンプルコードを教えていただければと思います。

関連するQ&A

  • Perlで圧縮ファイルを作成するには?

    質問なんですが・・・ perlで、ディレクトリ毎圧縮してしまうようなことが出来るのでしょうか? 検索条件に一致したレコードを取り出し、複数のcsvファイルをperlで作成するのですが、ダウンロードをまとめてさせたいと考えています。 圧縮形式はzipまたはlzhを予定しています。 環境としては、perl5、サーバーはLinuxです。

  • ファイルのリスト作成ソフト

    フリーソフトのファイルリスト作成ソフトで以下の条件すべてを満たしたものを探しています。 ・複数のフォルダを指定でき、下層フォルダにあるファイルまでリストに含めてくれる。(指定できるフォルダの数は二桁以上できること) ・ファイル名だけでなくフルパスで出力される。 ・一度登録したフォルダは次回以降入力しなくてもよい。 ・2度目からはリスト作成ボタンを押すだけで新しいファイルを作成してくれる。 ・リスト化するフォルダはネットワーク先の物も可能、もしくはリストのファイルの出力先をネットワーク先に出すことが出来る。 ・フリーソフトが望ましいが、上記すべての条件を満たしているならシェアウェアでもよい。 ・これは必須ではないが、起動させるだけでリスト作成の実行が出来るような機能があればなおよい。 結構条件は難しいと思うのですが、これだ、というのがあったら教えてください。 いろいろリスト作成ソフトは試してみましたが、上記を満たすソフトはありませんでした。 よろしくお願いします。

  • perl-cgi「日時によるファイル操作」について

    perl-cgi「日時によるファイル操作」について perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか? #調べたいディレクトリを読み込む。 $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; #ファイル(パス)名と作成日時を求める。 #最新2つのファイルパス(名)を表示する。 print "NewFile".ファイルパス1; print "<HR>"; print "OldFile".ファイルパス2; #最新2つ以外は全て削除 unlink($_); exit(0);

    • ベストアンサー
    • Perl
  • ディレクトリ/ファイル リストの作成

    WindowsにおいてFindFirstFileEx()関数を用いて、ディレクトリや ファイルのリストを作成しています。 1.ローカルディスクについては全く問題ありません。 2.ネットワークパスについて: a.ネットワークパス: \\kako\public\* も問題なくデータを取得できます。 b.ところが、ネットワークパス: \\kako\* の形式(コンピュータ名だけを指定。)は必ず失敗します。 複数のリモートマシンに対しても試してみましたが、コンピュー タ名だけの指定では必ず関数は失敗してしまいます。どうやら" 共有フォルダ"の先頭ディレクトリのみ特別な処理が必要なのか と思われます。 共有フォルダの一覧リストを作成するにはどうしたらよいので しょうか?

  • Excelで作成したWebページをHPにアップすると個人情報がもれることはありませんか?

    エクセルで作ったファイルを「Webページとして保存」するとhtm形式のファイルができますが、このファイルをテキスト形式で読み出して見ますと、もともとのエクセルファイルのファイル名にあたる部分の記載が読み取れました。他にファイルを特定できるような記載は見当たりませんでしたが、このようにして作成したhtmファイルをホームページにアップすると、個人情報が漏れるようなことはありませんか?例えばそのエクセルデータが保存されているハードディスクのディレクトリー名などがhtmファイルに表示され、ディレクトリー名に個人名などが表記されている場合などが心配です。 ちなみに、エクセルのファイル名が表記されていた部分は<style id="">というタグの部分でした。

  • WIn32API ディレクトリ内ファイルリストの取得(FindFirstFile不可)

    現在作成中のアプリケーションなんですが、NTFSのファイル名最大長(全角255文字,'\0'含めて511バイト)のまでサポートする必要があります。 ディレクトリ内のファイルリストを取得して、順番に処理するんですが、FindFirstFile(Ex)だと、WIN32_FIND_DATAのcFileNameが TCHAR cFileName[MAX_PATH]  (MAX_PATHは260) であるために、最大長を持つファイル名が扱えません。 MSDNをみるとCreateFileでディレクトリをオープンできるようですが、実際の読み込み手順(読み込み関数、ディレクトリレコードの構造、EOFチェックの方法など)がわからず困っています。 CreateFileで開いたディレクトリの操作方法、または、その他のディレクトリ操作方法をご存じの方よろしくお願いします。

  • 複数の条件に合致したファイルリストの作成方法を教えて下さい。

    複数の条件に合致したファイルリストの作成方法で 困っております。 Windows上のある場所に、 Directory0828  html  ┗A   ┗File001   ┗File002   ┗File003   ┗File005  ┗B   ┗File001   ┗File002   ┗File004   ┗File006  ┗C   ┗File001   ┗File003   ┗File004  img  ┗A   ┗File011   ┗File012   ┗File013   ┗File015  ┗B   ┗File011   ┗File012   ┗File014   ┗File016  ┗C   ┗File011   ┗File013   ┗File014 というディレクトリ構造とファイル群があるとします。 ※ディレクトリ名"html""img""A""B""C"は固定 ※ディレクトリは増減なし。  すなわち、第二階層はhtml,imgの2つで固定  第三階層は、それぞれに対してA,B,Cの3つで固定 ※ファイル名は、数、拡張子を含めて可変 上記を、 --------------------------------------------------- ----------- File List "Directory0828" ------------- --------------------------------------------------- 【html】 条件1)A,B,Cに全て存在するファイル名 File001 条件2)A,Bにのみ存在するファイル名 File001 File002 条件3)A,Cにのみ存在するファイル名 File001 File003 条件4)B,Cにのみ存在するファイル名 File001 File004 条件5)Aにのみ存在するファイル名 File005 条件6)Bにのみ存在するファイル名 File006 条件7)Cにのみ存在するファイル名 なし 【img】 条件1)A,B,Cに全て存在するファイル名 File011 条件2)A,Bにのみ存在するファイル名 File011 File012 条件3)A,Cにのみ存在するファイル名 File011 File013 条件4)B,Cにのみ存在するファイル名 File011 File014 条件5)Aにのみ存在するファイル名 File015 条件6)Bにのみ存在するファイル名 File016 条件7)Cにのみ存在するファイル名 なし --------------------------------------------------- という形式で Directory0828_filelist.txt という名前で作成したいのです。 上記を、プログラムの全くわからないオペレータでも 何らかの操作でミスなく行えるようにしたいのです。 ファイルリスト作成のフリーソフトやVBA、SQLなどの キーワードでいろいろ見てみたのですが、実現できそう なもの、方法が見当たりませんでした。 オペレータのPCにはExcel2003が入っているので、VBAで 実現できると一番助かります。 できれば、対象最上位親ディレクトリと同じ階層にVBA 入りのExcelファイルを置き、そのExcelファイルから、 フォーム上に該当情報(リスト対象ディレクトリ指定、 出力先パス指定)を指定後、ボタン一発で出力完了・・・ だと、とっても嬉しいです。 ただ、当方、Excel VBAは、まだ本を読み始めたばかり のド素人でして、HPに掲載されているソースのコピペ を使ってヨチヨチ歩き始めた段階です。 どなたか、お助け頂けませんでしょうか? よろしくお願い申し上げます。

  • ディレクトリ内のファイルから情報を取得したい

    ローカルのディレクトリ内に、大量のHTML/css/画像などのファイルがあります。 階層も深くまでサブディレクトリになっています。 このディレクトリ内のhtmlのファイルリストを作成し、 ファイル名・パス・ファイル内にh1が記述されているか、されている場合はなんと記載されているかを取得してリスト化(csv)したいです。 どのような方法が考えられるでしょうか? 当方Macを使用していて、規約で新しいアプリケーションをインストールできません。そのためアプリのインストールをしなくてもできる方法があればアドバイスいただきたいです。 どうかよろしくお願いいたします。

  • winampでタイトルにファイル名を表示させたい!

     winampで曲の再生時にリストに表示されるタイトルが、フルパスでファイル名が表示されてしまいます。  フルパスではなく、ファイル名だけ表示させたいのですが、どうしたら出来ますか?(IDタグを使っての表示はさせたくないです。)

  • 頭にperlとつけないと実行できない

    solaris8・perl5.6.1において、作成したperlのスクリプトを実行する時に、 頭にperlをつけて $ perl ファイル名 としないとスクリプトが実行できません。 実行ユーザーにパスはとおっています。 普通に $ ファイル名 で実行するにはどうしたら良いかアドバイス頂けないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl