**********ABCDEF******
166 hogehogehogehoge
266 hogehogehogehoge
**********ABCDEF******
105 hogehogehogehoge
356 hogehogehogehoge
656 hogehogehogehoge
**********ABCDEF******
125 hogehogehogehoge
356 hogehogehogehoge

**********ABCDEF******@@166 hogehogehogehoge@@266 hogehogehogehoge
**********ABCDEF******@@105 hogehogehogehoge@@356 hogehogehogehoge@@656 hogehogehogehoge
**********ABCDEF******@@125 hogehogehogehoge@@356 hogehogehogehoge

のようにしたいのですが、何かうまい方法はないでしょうか?
急いでいます。よろしくお願いします!

A 回答 (1件)

open(F, "xxxxx.txt");


$l = <F>;
push @all, $l;
while(<F>){
chomp;
if(/^\*+/){
print join('@@', @all), "\n";
undef @all;
push @all, $_;
} else {
push @all, $_;
}
}
print join('@@', @all), "\n";
close(F);
    • good
    • 0
この回答へのお礼

正規表現とかで簡単に行くものかと思って模索していましたが、
かなり難しいのですね。

ありがとうございます!非常に助かります!

お礼日時:2002/03/22 17:20

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

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

Qperl セレクトメニューを ↓の者です。

前質で→ http://oshiete1.goo.ne.jp/qa4142221.html
#print "<option value=\"$day1\">$day1"; で出来たのですがw
dayの日範囲を多くするとかなり長くなってしまい(T_T)
(初心者のくせに)foreachを使ってみようかと
エスケープしたりダブルコーションにしたり色々やっても・・・
<option>に月日が表示されません(T_T)
基本的に間違っているのでしょうか・・・ お願いします。
*他にも変なところがあったら教えて下さい。

--------------------------------------
<select name=dd><option value="なし" selected> ↓ <option value="なし">指定なし
EOM
foreach (0 .. $#pl) {
if ($in{'plan'} eq $_) {
print "<option value=\"$_\">$pl[$_]\n";
} else {
print "<option value=\"$_\">$pl[$_]\n";
}
}
print "</option></select>\n";
#--------------------------------------
### ↑メイン.cgiです。↑

### ↓ サブ.cgiです。↓
#--------------------------------------
# 時間
$time = time();

# 範囲日
$day1 = day0($time + (86400 * 2));
$day2 = day0($time + (86400 * 3));
$day3 = day0($time + (86400 * 4));
############ 上下の行のday数が14日間位まで続く・・・
@pl = ('$day1', '$day2', '$day3');

# 日計算
sub day0{
my(@weekdayname) = ('日','月','火','水','木','金','土');
my $time = shift || time();
my $day0 = $time + (24 * 60 * 60);
my ($yyyy, $mm, $dd, $w) = (localtime($day0))[5,4,3,6];
$yyyy += 1900;
$mm += 1;
return(
sprintf('%4d/%2d/%2d(%s)', $yyyy, $mm, $dd, $weekdayname[$w])
);
}

前質で→ http://oshiete1.goo.ne.jp/qa4142221.html
#print "<option value=\"$day1\">$day1"; で出来たのですがw
dayの日範囲を多くするとかなり長くなってしまい(T_T)
(初心者のくせに)foreachを使ってみようかと
エスケープしたりダブルコーションにしたり色々やっても・・・
<option>に月日が表示されません(T_T)
基本的に間違っているのでしょうか・・・ お願いします。
*他にも変なところがあったら教えて下さい。

--------------------------------------
<select name=dd><option value...続きを読む

Aベストアンサー

forで日付の配列を作る処理は問題ないので、表示されないとすると、if文の条件が該当しないから表示されていないだけでしょう。

まずは、ifをなくしてすべて表示させてみてください。

それから、全体の流れから推測すると、このifは、選択済みのoptionタグか、そうでないoptionタグのどちらかを表示する分岐ではなかったのでしょうか?

QPerl詳しい方よろしくおねがいします。

http://www.webpower.jp/

上記のサイトで無料配布されている「ウェブ・ストアー [パーソナル・エディション]」という簡易ショッピングバスケットをダウンロードし、動作確認中なのですが、確認画面では表示される「お届け先都道府県」が、注文完了後の画面と、実際に注文者・管理者に送信されるメールでは未選択の状態となってしまい、困っています。

また、連続して注文を実行すると、重複注文を避けるため「商品の注文は完了しています。」とシステムエラーになってしまうのですが、これだと追加注文ができません。前回と違う商品を注文してもエラーとなってしまうので、できれば、注文者の情報と買った商品がまったく同じだった場合のみエラーを返して、任意の設定時間を過ぎたら追加注文できるように改善したいと思っています。

サイトの「情報交換掲示板」にて質問しようと思いましたが、Internal Server Errorとなってしまい、掲示板自体が正常に動作していないようです。
サイト運営者にもメールで質問をしましたが、返事が返ってきません。

修正箇所をお分かりの方がおりましたら教えていただきたいと思います。
もしくは、CGIの作成等に関する質疑応答の出来る情報掲示板をご存知の方がいらっしゃいましたら、お教えください。
宜しくお願いします。

http://www.webpower.jp/

上記のサイトで無料配布されている「ウェブ・ストアー [パーソナル・エディション]」という簡易ショッピングバスケットをダウンロードし、動作確認中なのですが、確認画面では表示される「お届け先都道府県」が、注文完了後の画面と、実際に注文者・管理者に送信されるメールでは未選択の状態となってしまい、困っています。

また、連続して注文を実行すると、重複注文を避けるため「商品の注文は完了しています。」とシステムエラーになってしまうのですが、これだと追加注文がで...続きを読む

Aベストアンサー

Perlはよく分かりませんので、勉強がてら
自分のスペースに設置して試してみました。

>> 「お届け先都道府県」
1066行目付近を以下のようにしたら、動くと思います。
$key = 'お届け先都道府県';
#$val = "" if ($val == 0);
$val = "" if (!$val);

>> 連続して注文を実行すると、重複注文を避けるため「商品の注文は完了しています。」とシステムエラー

これは、私の環境では発生しませんでした。
・注文確定前にバスケットと確認画面を何往復しても問題なし
・注文完了後、TOPに戻って再注文も問題なし。


あと、order.html の お届け先郵便番号のフォーカス移動がおかしいです。

125行目付近の
if(this.value.length==3)zip.focus()
        ↓
if(this.value.length==3)zip2.focus()
とすれば、直ります

Qアップローダがうまく作れない

アップローダを作成しています。
しかしなぜか受け取る側の.plでファイルが見つからず、開けません。
HTMLと.plのソース付けときますので間違えの指摘お願いします

<table border="0">
<form action="./UpShori.pl" method="post">
<tr><th><Div Align="right">アップするファイル</th><th><Div Align="left"><input type="file" name="file" size="39"></th></tr>
<tr><th><Div Align="right">ファイルの説明</th><th><Div Align="left"><input type="text" name="setumei" size="50" maxlength="45"></th></tr>
</table><br>
<input type="submit" value="アップロード">

--受け取るUpShori.pl---
#!c:/Perl/bin/Perl.exe
print"Content-type: text/html\n\n";


$Data;
@DataBunkai;
$UpFileName;
@UpFileData;

read(STDIN,$Data,$ENV{'CONTENT_LENGTH'});
@DataBunkai = split("=","$Data");

@DataBunkai = split("&","$DataBunkai[1]");

$UpFileName=$DataBunkai[0];

# ここで”ファイルがありません”と出力される
open(READ,"<","$UpFileName") or die print"ファイルがありません";
@UpFileData=<READ>;
close(READ);

# ↓の生成されるファイル名は気にせずお願いします。
open(WRITE,">","0000");
print WRITE"@UpFileData";
close(WRITE);

print<<End_Of_Program;

End_Of_Program

アップローダを作成しています。
しかしなぜか受け取る側の.plでファイルが見つからず、開けません。
HTMLと.plのソース付けときますので間違えの指摘お願いします

<table border="0">
<form action="./UpShori.pl" method="post">
<tr><th><Div Align="right">アップするファイル</th><th><Div Align="left"><input type="file" name="file" size="39"></th></tr>
<tr><th><Div Align="right">ファイルの説明</th><th><Div Align="left"><input type="text" name="setumei" size="50" maxlength="45"></t...続きを読む

Aベストアンサー

こんにちは、
アップロードを行うCGIを書く際に、
どうしても使用できない場合以外、
CGI.pm もしくは類似のモジュールを使用せずに書くのは、
時間の無駄でしょう。

以下のURLのページを参考にして下さい。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
(CGI.pm の日本語PODです。)

あわせて、googleにて"Perl アップロード"で検索したら、トップにきたページです。
http://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html
丁寧に詳しく書いてあるので参考になると思います。

でも、アップロードには色々とセキュリティ的な問題があるので、
十分に吟味してください。

Qperlでの判定がうまくいきません

$ref == 0 が正常に判定されていないようです。なぜでしょうか?
また、if($tag =~ m/^tag$/ && $ref == 0){について、どのように改良するのが適切でしょうか?


$| = 1;
my $tag = "tag";
my $ref = "test";
if($ref eq ""){$ref = "0";}
$ref =~ s/%([a-f\d]{2})/pack 'H2',$1/egi;
if($tag =~ m/^tag$/ && $ref == 0){
print $ref;
}

Aベストアンサー

文字列を数値として比較しているので、そういった動作になります。
文字列として比較すれば望む通りの動作になると思います。

# if($tag =~ m/^tag$/ && $ref == 0){
if($tag =~ m/^tag$/ && $ref eq "0"){

Qうまく変数を当てられない?

フォーム部分を作成中です。

画像が設定されたフォルダにあり、それを選択すると言うことをしたいと思っています。また、以下は修正画面です。
ディレクトリ内のファイルを読み込みoptionに設定ですよね。で、以下のようにやってみました。
foreach $line (@data) {
($nt1,$nc1,$nt2,~~) = split(/<>/,$line);
chomp;
$e_nt1 = $nt1;
$e_nc1 = $nc1;
    ~~
}
#繰り返し用ナンバー設定
$no = 0;
#以下を6回繰り返し
while($no<6){
$no++;
print "<TR>\n";
print "<TD rowspan=\"3\" bgcolor=\"#999999\"></TD>\n";
print "<TD>\n";
#select開始
print "<SELECT size=\"1\" name=\"nt$no\">\n";
#ディレクトリオープン
opendir(DIR , $celdir);
 while($view = readdir(DIR)){
# $viewの内容と過去データが一緒なら「selected」をつける
  if($view eq ${"nt$no"}){$sel = selected;}
   print "<OPTION value=\"$view\" $sel>$view</OPTION>\n";
 }
print "</SELECT></TD></TR>\n";
print "<TR>\n";
print "<TD><IMG src=\"../../image/menu/${\"e_nt$no\"}\"></TD>\n";
print "</TR>\n";
print "<TR>\n";
print "<TD><INPUT type=\"text\" name=\"nc$no\" size=\"60\" value=\"${\"e_nc$no\"}\"></TD>\n";
print "</TR>\n";
print "<TR>\n";
print "<TD></TD>\n";
print "<TD><BR>\n";
print "</TD>\n";
print "</TR>\n";
}
これで、以前選んだ画像名には「selected」が付くと思ったのですが、ファイルが無い「..」と「.」と言うものに「selected」が付いています。

これはどう修正したらいいでしょうか?

フォーム部分を作成中です。

画像が設定されたフォルダにあり、それを選択すると言うことをしたいと思っています。また、以下は修正画面です。
ディレクトリ内のファイルを読み込みoptionに設定ですよね。で、以下のようにやってみました。
foreach $line (@data) {
($nt1,$nc1,$nt2,~~) = split(/<>/,$line);
chomp;
$e_nt1 = $nt1;
$e_nc1 = $nc1;
    ~~
}
#繰り返し用ナンバー設定
$no = 0;
#以下を6回繰り返し
while($no<6){
$no++;
pri...続きを読む

Aベストアンサー

よくわからないんだけど, $nt? に '.' とか '..' が入っていることはないんだよね?
・そもそも当該ディレクトリ中のディレクトリって表示させる必要ないんだから -f で弾く.
・もしくは画像ファイルの拡張子がわかっていればそれでファイル名をチェックする.
・'.' と '..' を特別扱いする.
の 3通りくらい?
全然関係ないんですが, シンボリックリファレンスを使うのを止めてみてはどうでしょうか. 無駄に見にくくしてるだけのような気がします.
あと, 上の foreach の中の chomp の意味がよくわかりません.


このカテゴリの人気Q&Aランキング

おすすめ情報