トップページ⇒hp
35コメント10KB

低脳ですいませんです。教えて下さいです。

■ このスレッドは過去ログ倉庫に格納されています
0001腐れ厨房NGNG
同一ディレクトリにあるファイルを開いて、"おまんこ"という文字列だけ削除するperlスクリプトを作りたいんですけど教えて下さいです。
下のように書いたら、ファイルが真っ白になっちゃいましたです。

#!/usr/bin/perl
$file = "./hame.txt";
open IN@` "+>$file";
while (<IN>) {
s/おまんこ//;
print IN #$nakami;
close IN;
0002あきあかねNGNG
open(DAT@`"$file");
@dat=<DAT>;
close(DAT);
foreach $dat(@dat){$dat=~ s/おまんこ//g;}
open(DAT@`"+< $file");
eval 'flock(DAT@`2);';
eval 'truncate(DAT@`0);';
seek(DAT@`0@`0);
print DAT @dat;
close(DAT);
こんなもんでどうでしょう?どっか間違えあるかもだけど。
0003腐れ厨房NGNG
ありがとです。うまくいきましたです。
0004腐れ厨房NGNG
出来たらこれも教えて貰えるととっても嬉しいです。
以下のように延々続く文章から”おまんこ”の行の
”おまんこ”以降の□□■□□■□□■\nだけ残し
てあとは全部削除したいんですが、どういう風にし
たらいいでしょうか?
”おまんこ”の行はランダムに発生しますです。

おまんこ□□■□□■□□■\n
○●◎○◎◎○●◎○◎○◎\n
○◎○●◎○○○◎○○●◎\n
おまんこ■■□■□■□■■\n
◎○◎◎○◎○◎○◎○◎◎\n
○◎○◎○\n
○◎○◎○○◎○◎○\n

0005>2NGNG
どうしてわざわざseekするんでしょうか?
普通にopen (DAT@`">$file");では不都合がありますか?
0006>4NGNG
open DAT@` "$file" ;
@dat=<DAT>;
@list = map s/おまんこ(.+)/$1/g@` @dat;
open DAT@` ">$file";
print DAT @list;
0007>6NGNG
間違いです。置き換え演算子の返り値は置き換えに成功した数です。
この場合はgrepして置き換える必要があります。

@list = grep m/おまんこ/@` @dat;
foreach $i (@list){
$i =~ s/おまんこ(.+)/$1/g;
push (@var@`$i);
}
print DAT @var
0008名無しさんNGNG
push (@var@`$i);
この行は要らないスね。

open DAT@` ">$file";
foreach (@dat){ if (/foo/) { s/foo(.+)/$1/g; print DAT; } }
close DAT;
あるいはこの方が早いかも。
0009あきあかね>2NGNG
それについてはここを見てください。
http://wakusei.cplaza.ne.jp/twn/wwwperl2.htm#flock
不都合があるそうです。
0010>8NGNG
ブロックを作らない方がもっと早いス。
foreach (@dat){ (/foo(.+)/) and print DAT $1; }
0011flockNGNG
flockかける前にファイルサイズを0にしちゃいけないなんて初耳でした。
でも、eval してるから致命的エラーにはならないものの、flock も truncate も Mac@`Win には
インプリメントされていないんで、NTサーバなんかじゃ使えませんねぇ。
#噂によるとNTサーバのシェアは20%ぐらいあるらしいです。まぁ怖いですねぇ。
#だから“ロックファイルを作る”に一票。

->7
こうすればmapでもイケますよ。

$foo = "foo";
print DAT foo_delete(@dat);

sub foo_delete {
@list = map /$foo(.+)/@` @_;
return @list;
}

0012flockNGNG
->9
flockかける前にファイルサイズを0にしちゃいけないなんて初耳でした。
でも、eval してるから致命的エラーにはならないものの、flock も truncate も Mac@`Win には
インプリメントされてないんで、NTサーバなんかじゃ使えませんねぇ。
#噂によるとNTサーバのシェアは20%ぐらいあるらしいです。まぁ怖いですねぇ。
#だから“ロックファイルを作る”に一票。

->7
こうすればmapでもイケます。

$foo = "foo";
print DAT foo_delete(@dat);

sub foo_delete {
@list = map /$foo(.+)/@` @_;
return @list;
}
0013腐れ厨房NGNG
<ファイル1の内容>
おまんこ□□■□□■□□■\n
○●◎○◎◎○●◎○○◎\n
おまんこ■■□■□■□■■\n
◎○◎◎○◎○◎○◎○◎◎\n
○◎○◎○\n

とりあえず、上のようなテキストの中から「おまんこ」で始まる行だけをファイル2に保存するスクリプトを僕なりに書いたつもりなんですが、エラーが出てしまいますです。このエラーは何を言ってるんでしょうか?

<スクリプト>
1:#! /usr/bin/perl
2:open(IN@` "ファイル1") || die "ファイル1 : $!";
3:open(OUT@` ">ファイル2") || die "ファイル2 : $!";
4:print OUT "\.\n";
5:while ( <IN> ) {
6: if($_ eq "^おまんこ" {
7: print OUT "$_";
8: }
9:}
10:close(IN);
11:close(OUT);

<エラー内容>
syntax error at ./test.pl line 8@` near "}"
syntax error at ./test.pl line 9@` near "}"
Execution of ./test.pl aborted due to compilation errors.
0014>13NGNG
> 6: if($_ eq "^おまんこ" {

6: if($_ eq "^おまんこ" ) {

括弧が足りない。
0015腐れ厨房NGNG
>14
ありがとです。気が付きませんでしたです。
0016腐れ厨房NGNG
111111111
GGG
111111111
111111111
rrrrrrrr
yyyyyyyyyyyyyy
rrrrrrrr
yyyyyyyyyyyyyy

こういう重複行を含んだファイルから重複行を削除して保存するにはどうしたらいいですか?
0017腐れ厨房NGNG
あ、調べたらLinuxにuniqという同一行を削除するコマンドがあるのですが、これを呼び出して使うって事は出来るのでしょうか?
0018新開地商店街NGNG
>17
uniqはソートされてないと使えないです確か。
行を連想配列に入れてチェックしたらどうでしょうか。
0019腐れ厨房NGNG
あ、ソートまでは出来ましたです。ところが外部コマンドの呼び出しがうまくいかないです。
@list = <MANKO>;
foreach $value (sort @list) {
# print MANKO $value;
system($value "| /usr/bin/uniq > omanko_file");
}

これだとうまくいかないです。omanko_fileも生成されないです。
0020銃火NGNG
uniqは使っていない。

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
open(FI@`"i.dat");
@aData=<FI>;
close(FI);
foreach $sLine(@aData){
$sLinez{($sLine)[0]}++;
}
open(FO@`">o.dat");
foreach(sort keys %sLinez){
print FO $_;
}
close(FO);
0021腐れ厨房NGNG
むーん、ちょっとスクリプトのスタイルを変えたらソートが機能しなくなっちゃいましたです。
ところで、無料のCGIできるサイトとか借りたら、モジュールとか外部コマンドとか使えるんですか?
0022>21NGNG
無料のところで使えるのはsendmailぐらいか。
Socket使えるところがあれば、俺も欲しい。
CGI串を置きたいので (ゎ
0023名無しさんNGNG
モジュールは使えるんじゃないかな。管理者が置いてなかったら自分のディレクトリに置いてしまえば
いいんだし。
0024>23NGNG
それはvirtualaveでも出来る方法なの?
0025住人NGNG
virtualaveなら標準モジュール全部置いてあると思うけど。
0026>25NGNG
バーチャルアベでソケットは使えないようですが……。
0027aNGNG
ge
0028名無しさんNGNG
ハイパーだったらソケット使えたような・・・
0029名無しさんNGNG
JAVA servlet がつかえる無料サーバなんて・・・
無いよね。
0030名無しさんNGNG
便乗質問なんですが

■■■■■死ね■■■
■■■■■■■■■
■死ね■■■■■■■
■■■■■■■■■

いろんな場所に入る「死ね」の入った行を削除するには
どうかけばよろしいのでしょうか・・?
0031むぎ茶NGNG

CGI串なんて使えねえよ。
バカじゃん。

0032>31NGNG
そうか、君には使えないか。かわいそうに。
0033>32NGNG
むぎ茶ってたぶん中学生だから
無視しときゃいいんだよ
0034>"むぎ茶"さんNGNG
最高
0035>むぎ茶NGNG
お前、使ってなかったか?
わけ分からん掲示板荒すときに。ハイパーのCGI串。
■ このスレッドは過去ログ倉庫に格納されています