トップページ⇒php
1001コメント371KB

Perlコーディング初心者質問スレ Part 43

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2005/08/12(金) 01:26:47ID:mHnZWvqz
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0977nobodyさん2005/10/15(土) 23:51:09ID:???
時々でいいから正規表現道場の事を思い出してあげてくださいです・・・
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0978nobodyさん2005/10/16(日) 00:09:56ID:???
>>973
タグ内だけ処理がしたいと。

my $str = '<div>\\<f\o\r\m \n\a\m\e="test" />\\<br />';
my @tag = ();
$str =~ s/(<.*?>)/push(@tag,$1);'<>';/eg;
foreach (@tag) {
s/\\//g;#好き勝手に処理
}
$str =~ s/<>/shift(@tag);/eg;

そもそもなんでそんな処理が必要なの?仕様の方を疑っちゃうよ。
0979nobodyさん2005/10/16(日) 00:33:05ID:???
>>978
サンキューです。
深い意味は無いですが、昔Perl使ってたの思い出してもう一度使おうかと思いとりあえず正規表現思い出すために自分で作った例題みたいな。
0980nobodyさん2005/10/16(日) 18:58:16ID:???
>>973
その正規表現で最初のキャプチャはこう
<div>\\<f\o\r\m \n\a\m\e="test" />\\<br />
     |←   $1   →| |← $2  →|
\e が最初なのは [^>]* が \ も食う最大マッチだからね
で、formタグ側は既にマッチし終えたから
(gオプションの)次はbrの方に行っちゃうのが一番大きい間違いだと思う
あとシングルクォート内でも \\ は \ に置き換えられるよ

gを使うならルックアラウンドアサーション使うか
1 while $str =~ s///; の形にするか
>>978のように2段階に分けて
sub myfunc { my $tmp = shift; $tmp =~ s/\\//g; $tmp; }
$str =~ s/(<[^>]*>)/ myfunc($1) /eg;
とかすればいいと思う
09817662005/10/16(日) 21:56:12ID:???
>>958

わけわかってなくてほんとうにゴメンなさい。。レス有難うございます。
csvに書き出して、それをDLしてExcelで開いたときに表示させたいのは、

1人目の名前: name1
その人の1〜3問目の回答番号: hoge1, hoge2, hoge3,
1〜3問目の正解番号: anser1,anser2,anser3

2人目の名前: name2
・
とすると

name1、hoge1, hoge2, hoge3,
”空欄”,anser1,anser2,anser3
name2、hoge1, hoge2, hoge3,
”空欄”,anser1,anser2,anser3
・
です。

現状は
name1、hoge1
”空欄”,anser1
name1、hoge2
”空欄”,anser2
name1、hoge3
”空欄”,anser3
・
て縦に並んでしましまいます。。


09827662005/10/16(日) 22:17:35ID:???

今の全ソースです。普通のFORM POST .htmlから飛ばしてます。
【question1.cgi】

#!/usr/bin/perl
require "cgi-lib.pl";
# 質問の取得

&ReadParse;
foreach my $k (keys %in) {
$in{$k} =~ s/\x0D?\x0A/<br>/g;
}

if(open(IFILE,"question_1.tsv")) {
while(<IFILE>) {
chomp();
push(@question,$_);
}
close(IFILE);
} else {
&Print_Error("質問設定ファイルを読み込めませんでした。");
}


09837662005/10/16(日) 22:18:42ID:???
# 回答ページの表示
print "Content-type: text/html\n\n";
print qq!
<HTML>
<HEAD>
<META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP">
<TITLE>回答</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<TABLE BORDER=1 WIDTH="800px" BGCOLOR="#ffffff">
<TR BGCOLOR="E2E2EE">
<TD WIDTH="60px"><FONT SIZE=2><B>質問番号</B></FONT></TD>
<TD><FONT SIZE=2><B>あなたの回答</B></FONT></TD>
<TD WIDTH="50px"><FONT SIZE=2><B>結果</B></FONT></TD>
</TR>
!;

09847662005/10/16(日) 22:19:34ID:???
# 回答の表示

my($qnum) = 0;
foreach (@question) {
($qval,$aval,@column) = split(/\t/);
next if($qval eq "");

$qnum++;
$key = "Q".$qnum;
$val = $in{$key};
if($val eq $aval) {
$check = "○";
} else {
$check = "×";
}

$anum = 0;
$answer[$anum] = " ";
foreach (@column) {
next if(!$_);
$anum++;
$answer[$anum] = $_;

}

push (@val, $val);
push (@aval, $aval);
0985nobodyさん2005/10/16(日) 22:23:39ID:???
何レスも使うんだったらどっかにうpしる
09867662005/10/16(日) 22:25:05ID:???
# csvへの書き込み
open(WRITE_BBSDAT , ">> file.csv");
print WRITE_BBSDAT join(',', $in{name}, $val), "\n";
print WRITE_BBSDAT join(',', '', $year), "\n";
close(WRITE_BBSDAT);

print qq!
<TR BGCOLOR="#ffffff">
<TD><FONT SIZE=2><B>$key</B></FONT></TD>
<TD><FONT SIZE=2>$val</FONT></TD>
<TD><FONT SIZE=2>$aval</FONT></TD>
</TR>
!;
}

print qq!
</TABLE>
</HTML>
!;

あとこれに名前がはいっていなかったら送信できないようにする機能も
つけたいです。。

csvの書き込みと名前はいってなかったらエラーが動いたら完成なんです。
perlとかこれがほんとに初めてで、なんとかここまでやりました。。
どうかご指導お願いいたします。。実は仕事なんです。助けてください。。泣
0987nobodyさん2005/10/16(日) 22:31:22ID:???
よもまつだな。
0988nobodyさん2005/10/16(日) 22:38:54ID:???
>>986
おまいのコードのデバッグをしてやるスレじゃないよ。

問題が再現する最短のコードを載せるべし。

> 今の全ソースです。

今の全ソースなど載せるなよ。
09897662005/10/16(日) 22:51:45ID:???
みなさんのおっしゃるとおりです。。スレの無駄遣いすいません。。
0990nobodyさん2005/10/16(日) 22:59:21ID:???
>>987の日本語が釣りであることを願う
0991nobodyさん2005/10/16(日) 23:04:21ID:???
>>990が釣りであることを願う
0992nobodyさん2005/10/16(日) 23:45:46ID:???
>>766
手伝ってやろうかとも思ったが「仕事」の二文字を見た瞬間にその気が失せた。
おまいもう少し考えて行動汁。
09937662005/10/16(日) 23:51:24ID:???
すません。。ここしかたよるところがなくて。。なんとかご指導願えませんでしょうか?ヒントだけでも結構です。後は自分でなんとかしたいと思っています。

何卒宜しくお願いいたします。。
0994nobodyさん2005/10/16(日) 23:56:43ID:???
ヒントならいっぱい出てるし。
がんばって勉強してください。
仕事ならなおさらです。
0995nobodyさん2005/10/16(日) 23:59:50ID:???
>>766
正直、このスレに完璧な答えが出てる。
これでわからないならもうその仕事は破棄しなさいな。
それが先方とお前の為だよ。
0996nobodyさん2005/10/17(月) 00:15:20ID:???
え、仕事をこのスレで質問?
よもまつですな。

ヒキがいうのもなんだけど。
0997932=950=9582005/10/17(月) 00:45:14ID:???
すまん、ソース全うpを提案したのは漏れだ。
>>766のところに上げて欲しかったんだけどな…

とりあえず次スレたててくる
0998nobodyさん2005/10/17(月) 00:48:33ID:???
Perlコーディング初心者質問スレ Part 44
ttp://pc8.2ch.net/test/read.cgi/php/1129477637/
0999nobodyさん2005/10/17(月) 00:48:38ID:???
仕事は今週中に   あと2日もあれば
やるぞ♪         余裕余裕         週末家で・・・        怒られればいいか・・・
  ∧∧    ∧∧      ∧∧  . .::::::::::::::::::::::::::┃::::::::::::::::::::::::::::::::::::::::::::  ∧||∧
 (・∀・)  ∩・∀・)   (・∀・)∩..::: ∧∧:::::::::::┃:::::::::::::::::::::::::::::::::::::::::::::::::(  ⌒ヽ
 / ⊃⊃ ヽ  ⊃ノ  /⊃  / .. :::('д` )::::::::┃::::∧ ∧::::::::::::::::::::::::::::::::::: ∪  ノ
 (  (    ヽ  )つ〜( ヽノ ...:::と  ヽ::::::::┃: ('д` )::::::(   )⌒ヽ;:::::::::: ∪∪
  (/(/'    (/     し^ J.. ...:::⊂,,_UO〜:┃:::(∩∩ ):::::|/.|/uと  )〜:::::::::::::::
      まだ2日間しか     残業すれば・・・    2chで聞けば・・・
                                         ↑
                                        今ここら辺
1000nobodyさん2005/10/17(月) 00:49:51ID:???
次スレたってる模様

Perlコーディング初心者質問スレ Part 44
http://pc8.2ch.net/test/read.cgi/php/1129477637/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。