Perlコーディング初心者質問スレ Part 43
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
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:???タグ内だけ処理がしたいと。
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:???サンキューです。
深い意味は無いですが、昔Perl使ってたの思い出してもう一度使おうかと思いとりあえず正規表現思い出すために自分で作った例題みたいな。
0980nobodyさん
2005/10/16(日) 18:58:16ID:???その正規表現で最初のキャプチャはこう
<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;
とかすればいいと思う
0981766
2005/10/16(日) 21:56:12ID:???わけわかってなくてほんとうにゴメンなさい。。レス有難うございます。
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
・
て縦に並んでしましまいます。。
0982766
2005/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("質問設定ファイルを読み込めませんでした。");
}
0983766
2005/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>
!;
0984766
2005/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:???0986766
2005/10/16(日) 22:25:05ID:???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:???おまいのコードのデバッグをしてやるスレじゃないよ。
問題が再現する最短のコードを載せるべし。
> 今の全ソースです。
今の全ソースなど載せるなよ。
0989766
2005/10/16(日) 22:51:45ID:???0993766
2005/10/16(日) 23:51:24ID:???何卒宜しくお願いいたします。。
0994nobodyさん
2005/10/16(日) 23:56:43ID:???がんばって勉強してください。
仕事ならなおさらです。
0995nobodyさん
2005/10/16(日) 23:59:50ID:???正直、このスレに完璧な答えが出てる。
これでわからないならもうその仕事は破棄しなさいな。
それが先方とお前の為だよ。
0996nobodyさん
2005/10/17(月) 00:15:20ID:???よもまつですな。
ヒキがいうのもなんだけど。
0997932=950=958
2005/10/17(月) 00:45:14ID:???>>766のところに上げて欲しかったんだけどな…
とりあえず次スレたててくる
0998nobodyさん
2005/10/17(月) 00:48:33ID:???ttp://pc8.2ch.net/test/read.cgi/php/1129477637/
0999nobodyさん
2005/10/17(月) 00:48:38ID:???やるぞ♪ 余裕余裕 週末家で・・・ 怒られればいいか・・・
∧∧ ∧∧ ∧∧ . .::::::::::::::::::::::::::┃:::::::::::::::::::::::::::::::::::::::::::: ∧||∧
(・∀・) ∩・∀・) (・∀・)∩..::: ∧∧:::::::::::┃:::::::::::::::::::::::::::::::::::::::::::::::::( ⌒ヽ
/ ⊃⊃ ヽ ⊃ノ /⊃ / .. :::('д` )::::::::┃::::∧ ∧::::::::::::::::::::::::::::::::::: ∪ ノ
( ( ヽ )つ〜( ヽノ ...:::と ヽ::::::::┃: ('д` )::::::( )⌒ヽ;:::::::::: ∪∪
(/(/' (/ し^ J.. ...:::⊂,,_UO〜:┃:::(∩∩ ):::::|/.|/uと )〜:::::::::::::::
まだ2日間しか 残業すれば・・・ 2chで聞けば・・・
↑
今ここら辺
1000nobodyさん
2005/10/17(月) 00:49:51ID:???Perlコーディング初心者質問スレ Part 44
http://pc8.2ch.net/test/read.cgi/php/1129477637/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。