• 締切済み

お直しお願いいたします

質問というか、お直しして貼っていただきたいのですが、以前友達に、教わってカウンターを作ったのですが、上手く動かなくなってしまいました。 プログラム言語とか全然わからないので、直したものを貼っていただけると幸いです。ソースはこれ↓です。 #!/usr/local/bin/perl $file = "./data.txt"; #変数file=./datta.txtの中身 $gif_file = "./image/"; #GIFファイルまでのアドレス(GIFファイルの入ったフォルダ) #ファイル読み込み open (FP,"$file"); #$file=data.txtを開く $data = <FP>; #変数$dataに<FP>を格納 close(FP); #ファイルを閉じる #カウント $data = $data + 1; #$dataに1プラスする処理 #ファイル書き込み open (FP,">$file"); #変数$fileに$data=<FP>を格納 print FP $data; #$dataの表示 close(FP); #FPを閉じる どうかよろしくお願いいたします。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.6

画像表示部分としてgifcat.pl の中身を示されてもね。 それをちゃんと用法に乗っ取って使っているのかどうかの方が問題です。 あなたが編集しているスクリプトの方で gifcat'gifcat() という関数を呼び出している手前で、 画像用ファイルの配列を作って、それを引数として渡していますか?? ファイル名の作り方にも問題がありそうな気がしますけど。 http://www.kent-web.com/ などで配布されているgifcat.pl を使ったカウンターを 参考にされることをおすすめします。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.5

#1です。 補足していただいたスクリプトは誰が修正した物ですか? 少しオリジナルを改編しているようですね。 オリジナルの「gifcat」を一度使ってみたらどうでしょう? オリジナルはここの一番下です。 http://www.tohoho-web.com/wwwsoft.htm

参考URL:
http://www.tohoho-web.com/wwwsoft.htm
konc
質問者

補足

すみません。やっぱりダメみたいです。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.4

#1です。 補足で貼っていただいた部分は、コメントであってスクリプト本体ではありません。 画面に表示させようとしている部分が有るはずなので、そこを載せていただきたいのですが・・・

konc
質問者

補足

これでしょうか?文字数の関係で全部張り切れませんでした。 package gifcat; $pflag = 0; $LeftPos = 0; $logicalScreenWidth = 0; $logicalScreenHeight = 0; ;# ===================================================== ;# gifcat'gifprint() - print out GIF diagnostics. ;# ===================================================== sub gifprint { $pflag = 1; &gifcat(@_); } ;# ===================================================== ;# gifcat'gifcat() - get a concatenated GIF image. ;# ===================================================== sub gifcat { @files = @_; $Gif = 0; $useLocalColorTable = 0; for $file (@files) { $size = -s $file; open(IN, "$file"); binmode(IN); sysread(IN, $buf, $size); close(IN); $cnt = 0; &GifHeader(); while (1) { $x1 = ord(substr($buf, $cnt, 1)); if ($x1 == 0x2c) { &ImageBlock(); } elsif ($x1 == 0x21) { $x2 = ord(substr($buf, $cnt + 1, 1)); if ($x2 == 0xf9) { &GraphicControlExtension(); } elsif ($x2 == 0xfe) { &CommentExtension(); } elsif ($x2 == 0x01) { &PlainTextExtension(); } elsif ($x2 == 0xff) { &ApplicationExtension(); } else { return("ERROR"); } } elsif ($x1 == 0x3b) { &Trailer(); last; } elsif ($cnt == $size) { last; } else { return("ERROR"); } } undef($buf); $Gif++; } if ($pflag == 1) { return; } $GifImage = "GIF89a"; $GifImage .= pack("C", $logicalScreenWidth & 0x00ff); $GifImage .= pack("C", ($logicalScreenWidth & 0xff00) >> 8); $GifImage .= pack("C", $logicalScreenHeight & 0x00ff); $GifImage .= pack("C", ($logicalScreenHeight & 0xff00) >> 8); if ($useLocalColorTable) { $PackedFields18[0] &= ~0x80; } $GifImage .= pack("C", $PackedFields18[0]); $GifImage .= pack("C", $BackgroundColorIndex); $GifImage .= pack("C", $PixelAspectRatio); if ($useLocalColorTable == 0) { $GifImage .= $globalColorTable[0]; } for ($i = 0; $i < $Gif; $i++) { $GifImage .= pack("CCC", 0x21, 0xf9, 0x04); $GifImage .= pack("C", $PackedFields23 | $TransparentColorFlag[$i]); $GifImage .= pack("CC", 0x00, 0x00); $GifImage .= pack("C", $TransparentColorIndex[$i]); $GifImage .= pack("C", 0x00); $GifImage .= pack("C", 0x2c); $n = $LeftPos; $LeftPos += $ImageWidth[$i]; $GifImage .= pack("C", $n & 0x00ff); $GifImage .= pack("C", ($n & 0xff00) >> 8); $GifImage .= pack("CC", 0x00, 0x00); $GifImage .= pack("C", $ImageWidth[$i] & 0x00ff); $GifImage .= pack("C", ($ImageWidth[$i] & 0xff00) >> 8); $GifImage .= pack("C", $ImageHeight & 0x00ff); $GifImage .= pack("C", ($ImageHeight & 0xff00) >> 8); if ($useLocalColorTable) { $PackedFields20[$i] |= 0x80; $PackedFields20[$i] &= ~0x07; $PackedFields20[$i] |= ($PackedFields18[$i] & 0x07); $GifImage .= pack("C", $PackedFields20[$i]); $GifImage .= $globalColorTable[$i]; } else { $GifImage .= pack("C", $PackedFields20[$i]); } $GifImage .= pack("C", $LzwMinimumCodeSize[$i]); $GifImage .= $ImageData[$i]; } $GifImage .= pack("C", 0x3b); }

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.3

「カウンターの数字の画像が一の位しか表示されなくなりました。」 ということは、質問のスクリプトは全部ではありませんよね。 (質問のスクリプトには表示させる部分が有りませんからね。) その、表示させているところが問題なので、そこを掲載しないと全く質問に答えられません。補足お願いします。

konc
質問者

お礼

すみません。長すぎて貼れないのですが、どうしたらいいでしょうか?

konc
質問者

補足

レスありがとうございますm(_ _)m スクリプトとはこれのことでしょうか? ;# ==================================================================== ;# ;# gifcat.pl: GIFファイル連結ライブラリ Ver1.57a ;# ;# Copyright (c) 1997,2001 http://tohoho.wakusei.ne.jp/ ;# ;# 著作権は放棄しませんが、自由に使用・改造・再配布可能です。 ;# ;# 基本的な使い方 ;# require "gifcat.pl"; ;# open(OUT, "> out.gif"); ;# binmode(OUT); # MS-DOS や Windows の場合に必要です。 ;# print OUT &gifcat'gifcat("xx.gif", "yy.gif", "zz.gif"); ;# close(OUT); ;# ;# デバッグ用(GIFの解析出力) ;# require "gifcat.pl"; ;# &gifcat'gifprint("xx.gif", "yy.gif", "zz.gif"); ;# ;# 制限事項 ;# アニメGIF同士を連結することはできません。 ;# アニメGIF対応のブラウザでなければ、最初の画像しか表示されません。 ;# 高さの異なるGIFファイルは連結できません。 ;# ;# 最新版入手先 ;# http://tohoho.wakusei.ne.jp/ ;# ;# ==================================================================== 続き↓

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

直すところはありません。正しいPerlスクリプトです。 ただし、Webアクセスカウンタとしては、 ・排他制御がなされてない。 ・カウンタを出力(HTMLもしくはイメージで。)する記述がない。 ――と使い物にならないので、これは捨ててしまって、出来合いのカウンタスクリプトをどっかから拾ってきた方が、簡単かつ確実だと。 目的が、Perlプログラミングの学習にあるのなら、問題点を明確にしてから質問した方が回答がつきやすいと思います。

konc
質問者

お礼

ご回答ありがとうございます。 排他制御とカウンタ出力はどうしたらできるのでしょうか?このプログラムに付け足すことはできないでしょうか?カウンターはおかしくなりましたが、カウントはずっとしているようで、それを引き継ぐ形で乗り換えるなら他のに乗り換えたいと思うのですが、数字の一桁目しか表示されないので、今どれくらいカウントされているのかわかりません。 問題は、カウンターの数字が1桁しか表示されないことです。 どうにかならないでしょうか?

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

「上手く動かなくなってしまいました。」 とは、具体的にどのような症状が出ているのですか? >print FP $data; #$dataの表示 これは表示ではなくカウントアップしたデータを再格納しているだけなので、画面には表示されないでしょう。

konc
質問者

お礼

レスありがとうございます。 >「上手く動かなくなってしまいました。」 >とは、具体的にどのような症状が出ているのですか? カウンターの数字の画像が一の位しか表示されなくなりました。 画面に上手く表示させるにはどうしたら良いのでしょう?

関連するQ&A

専門家に質問してみよう