お世話になっております。
perlでファイルない文字データを抽出する作業をしたいですが、やり方が分からなくて、ご存知の方ぜひ教えて頂けばと思います。
001.html内の内容
<html>
<head>
</head>
<body>
テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト<img src="bbb" \/><img src="ccc" \/><img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト</body>
</html>
質問内容
(1)このなかの<img src="aaa" \/>イメージファイル名を抽出したいです。本文ではイメージファイルの拡張子はなしです。入力の間違いではないです。
(2)抽出した文字列をimg.txtファイルで出力
以上よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ちと気になった点を突っ込ませてくださいな>#4.
my $html = join("", <IN>);
よりは
$/ = undef; my $html = <IN>;
の方がよいかと. あと,
printf(OUT "%s\n", join("\n", @src));
は
$" = "\n"; print OUT "@src\n";
にした方がシンプルじゃないかな.
あと open は (それなら) 3引数にするとか, そもそもリダイレクト (とコマンドライン引数) にまかせた方が簡単とかありますけどね.
No.4
- 回答日時:
こんな感じですかね。
コードを見比べてみてください。
インデントは全角スペースになっています。
#!/usr/bin/perl
use strict;
open(IN, "001.html") or die "ファイルが開けない";
open(OUT, "> img.txt") or die "ファイルが開けない";
my $html = join("", <IN>);
my @src = ($html =~ /<img[^>]+src="(.+?)"/g);
@src = &uniq(@src);
printf(OUT "%s\n", join("\n", @src));
sub uniq {
my %h;
return grep{
if(not defined $h{$_}){
$h{$_} = 1;
1;
}
} @_;
}
ご回答頂きまして誠にありがとうございました。
皆さまから教えて頂いた案を参考した上、何とかクリアできました。
今後ともよろしくお願いします。
No.3
- 回答日時:
「部分しか抽出できなかった」「上手くいけなかった」と書かれていますが, これでは何がどう「部分しか抽出できなかった」「上手くいけなかった」のかが分かりません.
・どのような入力に対して
・どのような結果を期待して
・(その期待に反し) 実際の結果はどうであったのか
をきちんと書いてください.
前半は「少なくとも方針はあっている」と思います. 後ろの方は何を表示させたいのかわかりませんが.
No.2
- 回答日時:
「やり方が分からなくて」ということだから「やり方」だけ:
1. ファイルを読み込む. $/ を undef にしてから読み込むとファイル全体を一気に読み込めて楽 (だけどメモリが足りなくなったら知らない).
2. その中から img タグを取り出す. 正規表現を使うのが自然か.
3. さらに「イメージファイル名」を取り出す. ここもやっぱり正規表現を使うところだろう.
4. 必要な「イメージファイル名」を出力.
ちなみに重複したものを 1つにまとめるのはハッシュを使うのがセオリー.
この回答への補足
ご回答ありがとうございました。
以下のように抽出だけできるかどうかを書いてみました
use strict;
my $temp="";
while(<>){
my $line=$_;
if($line=~/<img src="(.*?)" \/>/){
my $img=$1;
$temp .= "$img\n";
}
}
print $temp;
部分しか抽出できなかったのはどこか間違っているでしょうか?
また重複を避けるperlも書いてみましたが上手くいけなかった
use strict;
my $Key="";
my %Buf=();
while(<>){
my $line=$_;
# キーが含まれている行なら
if ( $line =~ /<img src="(.*?)">$/ )
{
$Key = $1;
if ( defined( $Buf{ $Key } ) )
{
next;
}
print $line;
$Buf{ $Key }++;
}
else
{
print $line;
}
}
No.1
- 回答日時:
(1) 「このなかの<img src="aaa" \/>イメージファイル名を抽出したいです」とはどういうことでしょうか? 特に「イメージファイル名」が何 (どこ) を意味するのか分かりません. あと, / の前に変なものが入ってるんだけどそれも本当にあるの?
(2) 「img.txtファイルで出力」とは? 「img.txt ファイル『に』出力」ですか?
ご回答ありがとうございます。
>(1) 「このなかの<img src="aaa" \/>イメージファイル名を抽出したいです」とはどういうことでしょうか? 特に「イメージファイル名」が何 (どこ) を意味するのか分かりません. あと, / の前に変なものが入ってるんだけどそれも本当にあるの?
<img src="aaa" \/>⇒<img src="aaa" />となります。
作業の目的はhtmlに使われているファイルとイメージフォルダ内ファイルが一致しているかどうかをチェックするため、html内イメージファイルを抽出したいのです。
>(2) 「img.txtファイルで出力」とは? 「img.txt ファイル『に』出力」ですか?
「img.txt ファイル『に』出力」したいです。
下手な日本語で申し訳ございませんでした。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- JavaScript htmlとcssに関する質問です 3 2022/12/06 05:36
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
バッチファイルで文字列削除に...
-
バッチファイルからVBAに引数を...
-
多数のサブディレクトリ内のフ...
-
バッチファイル 複数ファイル...
-
リモートのファイル存在確認
-
VBAでエクセルをtxtに変換する...
-
MATLABで行列を配列に格納する方法
-
UWSCでファイルを開く方法
-
COPYコマンドで結合すると余計...
-
ファイル内容の修正、行削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルで提出とは?
-
wikiでローカルファイルのリン...
-
psqlでエラーログをとりたい
-
UWSCでテキストファイルを開い...
-
バッチファイルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
.txtではなく.logの方が良いの...
-
txtのファイルから編集してもい...
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
バッチファイル 複数ファイル...
-
ファイルの最後に文字列挿入
-
テキストファイルのファイル名...
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
renameコマンドについて
-
accessでSQL文を使ってcsvファ...
-
コマンドプロンプトでスペース...
-
ファイルを処理中に次の処理に...
-
UWSCでテキストファイルを開い...
-
バッチファイルからVBAに引数を...
おすすめ情報