ちくのう症(蓄膿症)は「菌」が原因!?

教えてください!

サイトのHTML内の
<div class="CaseW1">テスト</div>

このテストを抽出し、test.txtに保存させたいのと、
ClassのCaseW1の「W1」だけ抽出させたいです。
※Caseは共通(CaseW2やCaseW3といった感じ)

どのようにするのでしょうか?

A 回答 (4件)

No.3 は UNIX/Linux でワンライナー実行する場合でしたが、


これは Windows のコマンドラインでは少々面倒なので、
今度はスクリプトファイルで実行する場合の例です。

use LWP::Simple;
my $content = get("サイトURL");
open(F, "> test.txt");
while ($content =~ m#<div class="Case(\w+)">([^<>]+?)</div>#g) {
print F "$1 : $2\n";
}
close(F);

参考
http://perldoc.jp/docs/modules/libwww-perl-5.813 …
    • good
    • 0
この回答へのお礼

ありがとうございます!!
解決することができました!!

お礼日時:2017/09/22 14:55

perl らしく簡単にやるなら


curl -s 対象URL | perl -ne 'print "$1 : $2\n" if m#<div class="Case(\w+)">([^<>]+?)</div>#' > test.txt
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

これは、デスクトップ上からは使用できませんか?

C:\Users\owner>C:\Users\owner\Desktop\ewal.pl
syntax error at C:\Users\owner\Desktop\ewal.pl line 3, near "curl -s "
Unknown regexp modifier "/r" at C:\Users\owner\Desktop\ewal.pl line 3, at end of
line
Illegal octal digit '8' at C:\Users\owner\Desktop\ewal.pl line 3, at end of line

Execution of C:\Users\owner\Desktop\ewal.pl aborted due to compilation errors.


C:\ Users \ owner> C:\ Users \ owner \ Desktop \ ewal.pl
C:\ Users \ owner \ Desktop \ ewal.pl 3行目の「curl -s」の構文エラーです。
C:\ Users \ owner \ Desktop \ ewal.pl 3行目の不明なregexp修飾子 "/ r"
ライン
C:\ Users \ owner \ Desktop \ ewal.pl 3行目、行末に不正な8進数の「8」があります

コンパイルエラーのためにC:\ Users \ owner \ Desktop \ ewal.plの実行が中止されました。

のようなエラーとなりました
※ewal.pl これは適当な名前です

お礼日時:2017/09/21 14:36

Perlについてはあまり詳しくないので手取り足取りでお教えすることはできませんが


このへんですかね

https://metacpan.org/pod/Mojo::DOM
https://metacpan.org/pod/HTML::DOM
    • good
    • 0
この回答へのお礼

ありがとうございます

参考にさせていただきます。
ただモジュールがインストールされていないか、使用できませんでした。

お礼日時:2017/09/21 14:34

正規表現で抜き出せないことはないですが


DOMライブラリを使うほうが効率がいいかもしれません
    • good
    • 0
この回答へのお礼

先日に続きご回答ありがとうございます;;

DOMライブラリとはなんですか?
use LWP::UserAgent;
use HTML::TreeBuilder;
こういうのを使うってこと・・・?

お礼日時:2017/09/21 10:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qプログラミング

プログラミングを学びたいんですが最初にある程度プログラミングができるようになってからアルゴリズム論を学ぶ方がいいですか?それとも最初にアルゴリズム論を学んだ方がいいですか?

Aベストアンサー

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは、コンピュータのない時代に数学の天才が作ったものだと思いますが、囲碁や将棋の定石のような解釈しかしていません。VBAなどでは、アルゴリズムを使った人など、年に一度、現れるかどうかですね。理由は、.NetFrameWork などの関数に、すでに包合されているからです。

ここのサイトの下に代表的なアルゴリズムの名称が出ています。

http://e-words.jp/w/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0.html

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは...続きを読む

Q派生クラスの利用にな当たり

以下のURL~プログラム見れます。
http://afurieitohannei.la.coocan.jp/P270haseiclass.htm
 さて、print 関数が9個もでてきて、スマートではないので
基礎レベルでは少し高度ですが!
$table=<<<eof~$〇〇〇=<<<eofを使いプログラムの変更を試みましたが、
エラーばかりでて、猿真似では到底できな代物です。
 この場合どうしたら<<<eofでprintの代替えができますか?
よろしくお願いします。

Aベストアンサー

print <<<eof
<tr>
<td>{$usr1->getname()}</td>
<td>{$usr1->getage()}</td>
<td>{$usr1->getadr()}</td>
<td>{$usr1->gettel()}</td>
<tr>
eof;

QPerl テキスト 重複 個数

ある書込ファイルでの重複した場合の処理・・・

~text.txt~
1490747427,あ,あ,あ,SrZqgZAs,1234
1490747417,あ,あ,あ,SrZqgZAs,1234
1490747071,7,7,7,SrZqgZAs,777
1490747041,6,6,6,SrZqgZAs,1234
1490747025,5,5,5,SrZqgZAs,1234

(左から「time,name,title,text,id,password」の順で並んでいます。)

今回、教えていただきたいことが、

次に入力する値が

name = あ
id = SrZqgZAs

だった場合に、text.txtに
すでに入力する値が、2回あるため
入力できないようにしたいのです。

そこで、
text.txt内にある
name(あ) と id(SrZqgZAs) の個数を数える
方法をご教示お願い致します。

※()内のnemeは
my $NAME = $form->param('name');
と、CGI.pmで受け取った値

idは
$ID = (※IPアドレスと時間による自動整正したソース)

ある書込ファイルでの重複した場合の処理・・・

~text.txt~
1490747427,あ,あ,あ,SrZqgZAs,1234
1490747417,あ,あ,あ,SrZqgZAs,1234
1490747071,7,7,7,SrZqgZAs,777
1490747041,6,6,6,SrZqgZAs,1234
1490747025,5,5,5,SrZqgZAs,1234

(左から「time,name,title,text,id,password」の順で並んでいます。)

今回、教えていただきたいことが、

次に入力する値が

name = あ
id = SrZqgZAs

だった場合に、text.txtに
すでに入力する値が、2回あるため
入力できないようにしたいのです。...続きを読む

Aベストアンサー

以下のようになります。
----------------------------
my $datafile="text.txt";
my $name = "あ";
my $id = "SrZqgZAs";
my $name_ctr = 0;
my $id_ctr = 0;
open(FH, $datafile);
while(<FH>){
chomp($_);
my ($time0,$name0,$title0,$text0,$id0,$pass0) = split(/,/,$_);
if ($name eq $name0){ $name_ctr++; }
if ($id eq $id0){ $id_ctr++; }
}
close(FH);
print "name_ctr=$name_ctr\n";
print "id_ctr=$id_ctr\n";
------------------------------------
以下、実行結果です。
name_ctr=2
id_ctr=5

Qどこがおかしいのか教えてください。

ファイルで
file170901.jpg
file170902.jpg
file170903.jpg
file170904.jpg
   ・
   ・
   ・
file170908.jpg

とあってこれは170908部分は日付なので
当日170908以外のファイルを消したいので
(当時以外の31日前からのファイルを削除しようとしています)
下記のコードを書いたのですがうまくいきません
どこがわるいのでしょうか?

教えてください。

--------------------------------------------------

#!/usr/local/bin/perl

for($cnt = 31 ; $cnt = 1 ; $i = $i - 1) {

$tm = time - $cnt * 60 * 60 * 24;

($sec,$min,$hour,$mday,$mon,$year,$wno) = localtime($tm);

$nitizi = sprintf("%02d%02d%02d",($year+1900)-2000,$mon+1,$mday);

$setfile = './file'.$nitizi.'*.jpg';

#unlink glob($setfile);

}

exit;

ファイルで
file170901.jpg
file170902.jpg
file170903.jpg
file170904.jpg
   ・
   ・
   ・
file170908.jpg

とあってこれは170908部分は日付なので
当日170908以外のファイルを消したいので
(当時以外の31日前からのファイルを削除しようとしています)
下記のコードを書いたのですがうまくいきません
どこがわるいのでしょうか?

教えてください。

--------------------------------------------------

#!/usr/local/bin/perl

for($cnt = 31 ; $cnt = 1 ; $i = $i - 1) {
...続きを読む

Aベストアンサー

何故、./file170808*.jpgのようなワイルドカードにしているのかは、判りませんが、それは置いといて、
for($cnt = 31 ; $cnt = 1 ; $i = $i - 1) {

for($cnt = 31 ; $cnt > 0 ; $cnt--) {
        ^^^^^^^^^^^

$tm = time - $cnt * 60 * 60 * 24;

$tm = time() - $cnt * 60 * 60 * 24;
   ^^^^^

に変えてください。

QPerl CSVファイルの複数条件での検索

はじめまして
Perl初心者です。
どうかご教示お願い致します。

20,a,12,34
19,a,12,34
18,a,12,34
17,a,12,34
16,a,12,34
15,a,12,34
14,a,12,34
13,a,12,34
12,asa,12,34
11,a,12,34
10,sasaa,12,34
9,a,12,34
8,asa,test,34asa
7,a,12,34
6,a,12,34
5,a,20,34
4,a,12,34
3,a,12,34
2,a,12,34
1,a,12,34

このようなCSVファイルがあり
1列目が「asa] 2列目が[test]
が一致する、3列目[34asa]を抽出させたいのですが

どのようにするのでしょうか?

Aベストアンサー

マッチした回数を覚えておきます。
最後にマッチ件数が0なら、ないと表示します。

$ctr = 0;
while(<>){
@elm = split(/,/);
if ($elm[1] eq 'asa' && $elm[2] eq 'test'){
print $elm[3],"\n";
$ctr++;
}
}
if($ctr ==0){
print "検索結果はありません";
}

Q正規表現でスペースが何回かでた後の検索

正規表現の書き方をお教え願います。

ああ いい うう ええ おお

スペースが3回以上あるなら最後の おお を検索
スペースが2回以下なら対象外

おお は行末ですがの文字の長さは変化します。

宜しくお願い致します。

Aベストアンサー

正規表現を使用するツールが不明なので、もしかしたら外しているかもしれませんが

一般的には以下ではないでしょうか
(?<=^([^\s]+\s){3,})[^\s]+$

対象文字列をキャプチャしたい場合は
(?<=^([^\s]+\s){3,})([^\s]+)$
として、\1を使用してください。

Qファイルをテキストエディタで開いた中にあるデータを一括で取得したい

テキストエディタで開くと下記のような文字列が表示されるファイルが数万件があります。
(.txtや.csvファイルではありません)
↓ここから
 i default ・ u ネ B $g 0 ] $g C F G 81 1 ヘ A1 145123548748 ヒ u ネ H h& h& C F  & ! T 0 U @・ ・ ク ・  g 」
↑ここまで
(実際はもっと長いです)

それぞれファイルごとに上記の中にある『145123548748』等の12桁の数字が必ず1つだけ含まれています。
この12桁の数字だけを取得し、.txtファイルとして一括で取得することは可能でしょうか?
バッチファイル等で作れればと思っていますが何か良い方法がありましたら教えてください。

最終的には、
『12桁の数字』(半角スペース)『ファイルの場所とファイル名』の一覧を作れればと思っています。
例)kansei.txt
145123548748 C:\aaa\bbb\ccc\xxx.zzz
468197989411 C:\aaa\bbb\ddd\yxy.zzz
684315451373 C:\eee\fff\xxy.zzz

テキストエディタで開くと下記のような文字列が表示されるファイルが数万件があります。
(.txtや.csvファイルではありません)
↓ここから
 i default ・ u ネ B $g 0 ] $g C F G 81 1 ヘ A1 145123548748 ヒ u ネ H h& h& C F  & ! T 0 U @・ ・ ク ...続きを読む

Aベストアンサー

grepツールもしくはテキストエディタ自体のgrep機能をつかえばよろしいのでは?

QGrepの出力結果を細かく指定したい

https://oshiete.goo.ne.jp/qa/9818180.html
上記質問の続きです。

サクラエディタのGrep機能で一括で12桁の数字を抜き出すことはできたのですが、
上記質問の『例)kansei.txt』の形式で出力ができませんでした。
Grepツールで出力結果を細かく指定して出力できるものはありますか?
Grepの結果に毎回自分で置換を行えば目的のものは得られますが、同様の作業を何度も行う予定なので楽にできる方法があればと思っています。

自分でも調べましたが出力結果について明確に説明されているものは少なく、
Grepと同じようなコマンドプロンプトのfindstrや、PowershellのSelect-Stringも調べましたが
できるのかわからなかったので質問しました。

PCはWindows7です。

Aベストアンサー

N0.3のお礼を拝見しました。
12桁の途中で改行が入るということですよね?
では、以下でどうでしょう

-----ここから
$me = "search.ps1" # 本スクリプトファイル名
$out = "kansei.txt" # 出力ファイル名

Get-ChildItem | %{
$name = $_.Name
if(($name -ne $me) -and ($name -ne $out)){
$s = Get-Content $_
if($s.gettype().Name -eq "Object[]"){$s = $s -join ""}
if($s -match "\d{12}"){
"$($Matches[0]) $($_.FullName)" | Out-File -FilePath $out -Append
}
}
}
----ここまで

Qフォルダとファイルを圧縮できません。(zip形式)やり方教えてください。

Webアプリケーション制作の勉強中で、エラーに対応できないので、専門家にソースコードを一式、
zip形式でメールで送るように言われました。フレームワークはRuby on Railsです。ファイル転送ツールにcyberduckを使いその中でコードの記述をしています。アプリケーション全体をまとめるフォルダが一つありその中にプログラミングしていますがファイルとフォルダの数はトータル100以上です。
その元となるフォルダを圧縮しようとカーソルを持って行き右クリックしても「送る」は表示に
でてきません。そのかわり「アーカイブを作成」 >が表示され、その下に***.tar, ***.tar.gz, ***.tar.bz2***.zip と出てきて***.zipを選択してもエラーが出ます。開発環境はWindows10に仮想マシン(VirtualBox, Vagrant)を立ち上げPuttyでSSH接続し、CyberDuck(ファイル転送ツール)で
プログラミングしています。このようなマニアックな質問に回答していただくことはできるのでしょうか?
結論から言うと、フォルダをまとめて圧縮しメールに添付して送りたいのです。
宜しくお願いします。

Webアプリケーション制作の勉強中で、エラーに対応できないので、専門家にソースコードを一式、
zip形式でメールで送るように言われました。フレームワークはRuby on Railsです。ファイル転送ツールにcyberduckを使いその中でコードの記述をしています。アプリケーション全体をまとめるフォルダが一つありその中にプログラミングしていますがファイルとフォルダの数はトータル100以上です。
その元となるフォルダを圧縮しようとカーソルを持って行き右クリックしても「送る」は表示に
でてきません。そのかわり...続きを読む

Aベストアンサー

キーボードの最下段にある Windows キー (田のロゴマークが刻印されている) を押しながら「Eい」キーを同時に押すと新しい Window が表示されます。これが Windows エクスプローラを起動する基本操作なので覚えておくといいでしょう。Windows 95→Windows 10 まで変更されておらず、今後も変更されないものと思われます。

ここでドキュメントフォルダーなどを開きます。そして空欄部分を右クリックしてポップアップメニューから「新規作成」→「圧縮 (Zip形式) フォルダー」を選択し適当な名前をつけます。

その圧縮フォルダーを開き、改めて「田」+「Eい」で別の Window を開き、圧縮したいファイルがあるフォルダーを表示させます。

このまま、圧縮したいファイル(複数指定可)を圧縮フォルダーにドラッグすればできる筈です。

他にも方法はありますが、Windows やアプリのバージョンが変わると通用しなくなるので、基本で覚えておくのがいいと思います。

Q【VBA】IF文 複数(ネスト)の時の処理について

こんにちは。
if文についておしえてください。
以下のようなマクロがあるとします。

変数 tensuuに-1をいれて実行すると①→②のように動作し「入力エラー」と表示されます。
tensuuに120を入れて実行すると①´→②´の順に動作し「入力エラー1」と表示されます。

どして、-1のときは入力エラー1にはいかず入力エラーにいくのでしょうか?
120のときは入力エラーにはいかず入力エラー1にいくのでしょうか?

動きがよくわかりません。
IF文とELSEはどういう紐づけがされているのでしょうか?

よろしくおねがいいたします。
   
Sub t()
tensuu = -1
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If
End Sub

こんにちは。
if文についておしえてください。
以下のようなマクロがあるとします。

変数 tensuuに-1をいれて実行すると①→②のように動作し「入力エラー」と表示されます。
tensuuに120を入れて実行すると①´→②´の順に動作し「入力エラー1」と表示されます。

どして、-1のときは入力エラー1にはいかず入力エラーにいくのでしょうか?
120のときは入力エラーにはいかず入力エラー1にいくのでしょうか?

動きがよくわかりません。
IF文とELSEはどういう紐づけがされているのでしょうか?

よろし...続きを読む

Aベストアンサー

If 〜 Then 〜 Else 〜 End If
で1セットです。

ネスト(入れ子)になったIF文というのは、 Then 〜 とか Else 〜 の〜の部分にIf文がくるものです。
ですから、外のIfを越えてしまうことはありません。
よって、一番内側から見ていけば、構造がはっきりします。


一番内側から見ます。

If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If

が1セットです。
これを 「文1」とすると元のプログラムは

If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If

となります。この状態で「一番内側」を見ると

If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
です。これを「文2」とすると

If tensuu >= 0 Then '①
「文2」
Else
MsgBox "入力エラー" '②
End If


余談ですが
この例の場合、外側2つは、判定内容と処理とが離れてしまい、見辛いのは確かです。
if 条件 Then A Else B は if not条件 Then B Else A と同じ、ということから、Thenでの処理とElseでの処理を入れかえれば、
条件の直ぐ下の処理が来るので、見易さが格段によくなります。

If tensuu < 0 Then '① ' tensuu<0 は not (tensuu>=0)と同じ
MsgBox "入力エラー" '②
ElseIf tensuu > 100 Then '①´
MsgBox "入力エラー1" '②´
ElseIf tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If ' ElseIfで継いでいるので、ネストにはなっていない

If 〜 Then 〜 Else 〜 End If
で1セットです。

ネスト(入れ子)になったIF文というのは、 Then 〜 とか Else 〜 の〜の部分にIf文がくるものです。
ですから、外のIfを越えてしまうことはありません。
よって、一番内側から見ていけば、構造がはっきりします。


一番内側から見ます。

If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If

が1セットです。
これを 「文1」とすると元のプログラムは

If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
...続きを読む


人気Q&Aランキング