Perl 初心者コーナー Part23
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
03/05/16 11:18ID:zDRBc/j4【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0951nobodyさん
03/06/07 01:43ID:Y8iN/hYFrequire './data/data_1.cgi';
ひとつだけ呼び出すのは↑こんな感じになってました
data_1.cgiとdata_2.cgiのふたつを呼び出したいです
0952nobodyさん
03/06/07 01:45ID:???require './data/data_1.cgi';
require './data/data_2.cgi';
>>951の質問はこれにて終了しました。
↓次の方どうぞ
0953936
03/06/07 02:27ID:???ファイルの内容を
while( <FILE> ){print;}でテキストエリアに渡した場合は、Windows改行になるのでしょうか?
0954nobodyさん
03/06/07 02:34ID:???0957936
03/06/07 02:54ID:???そうですか。。。
Linuxの鯖なのに
if($r_code eq "lf"){$body =~ s/\x0D\x0A$/\x0A/;}
elsif($r_code eq "cr"){$body =~ s/\x0D\x0A$/\x0D/;}
で変換できているので、CR+LFで出力されていることになりますが、、、
UNIXはLFだと思ったんだけど、意外だ・・・・
0958nobodyさん
03/06/07 06:18ID:???そのファイルがどの環境で作られたのかによるんじゃない?
Windows環境で書いたファイルであれば、どこに持っていこうがCRLFのまま。
これをUNIX系環境で1行読み込んだ場合、LFの前のCRは「文字列の一部」として
そのまま読み込まれるだけだと思うんだが。
なんか、読み込んだ時点で自動的に変換されるとか、1行書き込むとUNIX環境では
自動的にLF改行になるとか、そんな感じに勘違いしてない?
それと、あなたの実行環境ってローカルで動かしてるサーバーだよね?
間違ってもレンタルサーバーとかプロバイダスペースじゃないよね?
なんか会話が噛みあってないから。
0959nobodyさん
03/06/07 11:48ID:???掲示板で(^-^)などの顔文字があればそれを画像にすりかえるために
IMGタグに置換しようとしていますが、あらかじめ配列に顔文字のリストを
入れて置換してもうまくいきません。
顔文字のリストは
@list = (
"(^-^)", "kao1.gif",
"(T-T)", "kao2.gif",
);
という感じで、実際に置換している部分は
for($i = 0; $i < @list + 0; $i+=2){
$msg =~ s/($list[$i])/<IMG src=\"$list[$i+1]\" 〜略〜 alt=\"$list[$i]\">/g;
}
としています。まったく置換してくれません。
試しに顔文字のリストの顔の部分をOKなどにしてみると置換されました。
特殊な文字だから置換がうまくいかないのでしょうか?
どうすれば解決できるか教えてください、お願いします。
0960936
03/06/07 12:00ID:???>なんか、読み込んだ時点で自動的に変換されるとか、1行書き込むとUNIX環境では
>自動的にLF改行になるとか、そんな感じに勘違いしてない?
へ?ぜんぜん思ってませんよ。。。
0961936
03/06/07 12:05ID:???えと、つまり
Windows環境で、テキストエリアに入力した文字をcgiに送って
$body =~ s/\x0D\x0A$/\x0A/;
こうしても、LFにならないってことでしょうか?
0962nobodyさん
03/06/07 12:36ID:???顔文字が正規表現のメタ文字として解釈されているんでない?
顔文字のメタ文字を\でエスケープするか、もし面倒ならquotemetaであらかじめ
変換しておくとか。(\Q \Eって使えたかな…どなたか助言求む)
できればソースを書きたいんだけど、いま手元に実行環境がないんで勘弁して。
0963nobodyさん
03/06/07 12:51ID:???いい加減うぜぇ。2ちゃんは学校じゃねぇ。
質問等はまとめて話せ。少しは自分で調べて話せ。
>こうしても、LFにならないってことでしょうか?
やってみろバカ。プログラムに実験はつきものだ。
0964936
03/06/07 13:05ID:???やってみました。
if($file =~ /(.*)\x0D\x0A$/){$code = "CR+LF (Win)";}
elsif($file =~ /(.*)\x0A$/){$code = "LF (UNIX)";}
elsif($file =~ /(.*)\x0D$/){$code = "CR (Mac)";}
こいつで正確に改行コードがえられるのかだけ教えてくれませんか?
0966nobodyさん
03/06/07 13:12ID:???0968nobodyさん
03/06/07 14:02ID:mCmiN6Nzぃゃ、チェックできるのかを質問してるのに
チェックしかできないって怒られても……
0969965
03/06/07 14:03ID:???すまん。
>改行コードがえられるのかだけ
が
>改行コードかえられるのかだけ
に見えてた。
末尾の改行に関してはそれでいける。
でも>>966の言うようにやってみれば分かるだろ。
CR+LF,LF,CRなファイルを用意してやってみればいいんだから。
0970nobodyさん
03/06/07 14:21ID:mCmiN6Nzif($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。それにチェックするスクリプトも一行目の改行コードを調べているので不安なんですが、一つのファイルに改行コードが複数あるってことはないんでしょうか?
それと昨日もらったレスでは/sがいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
0971_
03/06/07 14:21ID:???0972970
03/06/07 14:27ID:mCmiN6Nzさっきの/sは/gの間違いでした。
で、/gなんですけど、試したところ複数行の文字は/gがないとコードが変わりませんでした。
たぶん/gを省いてくれた人はチェック時のことをいってくれてたんですね。
0973名無し募集中。。。
03/06/07 14:53ID:???和鳥でこれが使えないのでデリったら書き込みができなくなった
なんか方法はありまつか?
0974nobodyさん
03/06/07 15:11ID:???お前頼むからスレタイよく読んでから書き込んでくれ。
http://up.2chan.net/d/src/1054780479575.jpg
0975nobodyさん
03/06/07 15:40ID:???>if($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
>elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
>でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。
意味が分かりません。
>チェックするスクリプトも一行目の改行コードを調べているので
意味が分かりません。
>一つのファイルに改行コードが複数あるってことはないんでしょうか?
モノによる。普通は有り得ないが作れないことも無い。
>それと昨日もらったレスでは/s(=>/g)がいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
意味が分かりません。
正規表現の$の意味は?
0976nobodyさん
03/06/07 17:37ID:???UNIXでCRがどういう意味を持ってるかってこと。
0977936
03/06/07 17:37ID:???>>if($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
>>elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
>>でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。
>意味が分かりません。
フォームに入力した文字を、ラジオボタンに押されたものによって、
上のif文で改行コード変更するスクリプトなんです。
LFとCR+LF形式には変換できたのですが、
CR形式に変換できないんです。
>チェックするスクリプトも一行目の改行コードを調べているので
意味が分かりません。
改行コードをチェックするスクリプトです。
# 改行コードの取得
open(FILE, "$name");
$file = <FILE>;
close(FILE);
if($file =~ /(.*)\x0D\x0A$/ && $bin !=~ /40/){$code = "CR+LF (Win)";}
elsif($file =~ /(.*)\x0A$/ && $bin !=~ /40/){$code = "LF (UNIX)";}
elsif($file =~ /(.*)\x0D$/ && $bin !=~ /40/){$code = "CR (Mac)";}
else{$code = "";}
このように先頭行だけをとって調べています。
>>それと昨日もらったレスでは/s(=>/g)がいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
>意味が分かりません。
>>933で、下で/gがなくなっているので・・・
0978936
03/06/07 17:38ID:???これは無視しちゃってください。
ファイル一覧取得するスクリプトの一部分で、
こいつで、ディレクトリ以外の改行コードの取得ってことです。。
すいません。
0979936
03/06/07 17:42ID:???CR改行の件ですが、ローカルではできたのにレン鯖ではできなかったんです。
で、ただたんにスクリプトを更新していなかっただけでした。すいません。
0980nobodyさん
03/06/07 17:59ID:???0982nobodyさん
03/06/07 19:13ID:???どうやってできなかったのかな?うちでは両方できたけど。
%list = (
'(^-^)', 'kao1.gif',
'(T-T)', 'kao2.gif',
);
$msg =~ s/\Q$_\E/$list{$_}/g for(keys %list);
0983967
03/06/07 19:58ID:???あぁ・・・書き忘れてました。\Qと\Eのは書き方はわからなかったのです。
たぶんquotemetaの書き方も間違っていたんだと思いますけど。
できました。教えていただいてありがとうございました。
0984nobodyさん
03/06/07 20:10ID:???何層も下の場合でも使えるの・・
0985nobodyさん
03/06/07 21:10ID:???http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
0987nobodyさん
03/06/07 22:01ID:???http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
0988nobodyさん
03/06/07 22:05ID:???誰か教えてください。
0992nobodyさん
03/06/07 22:13ID:???違う。
>>985がファイルテスト演算子って言いたいだけだったら
わざわざGoogleへのリンクを貼らないだろう。
>>986は>>985のリンク先を一つも見てないからもう一度貼ったまで。
http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
の一番上のリンク見るだけで解決する話なのに。まあ>>986は氏ねってこった。
0993nobodyさん
03/06/07 22:13ID:UHTFNtX1どうやればよいのでしょうか。
調べてもこれといったものが見つからなかったため、教えていただき
たい次第です。
0994nobodyさん
03/06/07 22:14ID:???・・・あんまり回答になってなかった。
「聞く前に試してみろ」と言いたいのではなく、「聞き返す前に読め」といいたい。
せっかく答え返ってきてるのに、何のために聞き返すのかサパーリ。まあ>>986は氏ねってこった。
0995nobodyさん
03/06/07 22:18ID:???0998nobodyさん
03/06/07 22:21ID:???0999nobodyさん
03/06/07 22:22ID:???1000nobodyさん
03/06/07 22:22ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。