dポイントプレゼントキャンペーン実施中!

質問というか、お直しして貼っていただきたいのですが、以前友達に、教わってカウンターを作ったのですが、上手く動かなくなってしまいました。
プログラム言語とか全然わからないので、直したものを貼っていただけると幸いです。ソースはこれ↓です。

#!/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を閉じる

どうかよろしくお願いいたします。

A 回答 (6件)

画像表示部分としてgifcat.pl の中身を示されてもね。


それをちゃんと用法に乗っ取って使っているのかどうかの方が問題です。

あなたが編集しているスクリプトの方で
gifcat'gifcat()
という関数を呼び出している手前で、
画像用ファイルの配列を作って、それを引数として渡していますか??
ファイル名の作り方にも問題がありそうな気がしますけど。

http://www.kent-web.com/
などで配布されているgifcat.pl を使ったカウンターを
参考にされることをおすすめします。
    • good
    • 0

#1です。



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

参考URL:http://www.tohoho-web.com/wwwsoft.htm

この回答への補足

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

補足日時:2006/01/03 17:47
    • good
    • 0

#1です。


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

この回答への補足

これでしょうか?文字数の関係で全部張り切れませんでした。
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);

}

補足日時:2006/01/02 11:11
    • good
    • 0

「カウンターの数字の画像が一の位しか表示されなくなりました。


ということは、質問のスクリプトは全部ではありませんよね。
(質問のスクリプトには表示させる部分が有りませんからね。)

その、表示させているところが問題なので、そこを掲載しないと全く質問に答えられません。補足お願いします。

この回答への補足

レスありがとうございます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/
;#
;# ====================================================================
続き↓

補足日時:2006/01/01 15:51
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/02 05:08

直すところはありません。

正しいPerlスクリプトです。
ただし、Webアクセスカウンタとしては、
・排他制御がなされてない。
・カウンタを出力(HTMLもしくはイメージで。)する記述がない。
――と使い物にならないので、これは捨ててしまって、出来合いのカウンタスクリプトをどっかから拾ってきた方が、簡単かつ確実だと。

目的が、Perlプログラミングの学習にあるのなら、問題点を明確にしてから質問した方が回答がつきやすいと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/31 15:51

「上手く動かなくなってしまいました。


とは、具体的にどのような症状が出ているのですか?

>print FP $data; #$dataの表示
これは表示ではなくカウントアップしたデータを再格納しているだけなので、画面には表示されないでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/31 15:54

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