このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

思うようにテキストファイルへの書き込みができません。

発言者:さいとう
( Date Tuesday, March 13, 2001 16:19:21 )


はじめまして。perlをはじめてまだ間もない大学生初心者です。

今までサーバーがunix環境だったのですが、最近Macとなりとまどっております。どうかお力を貸していただけないでしょうか?
やりたいことはとても簡単なことなのです。アンケートを作っているのですが、テキストファイルへの書き込みがうまくいきません。

テキストをファイルハンドルTXTで読み込んでから...
@txt = <TXT>;
$id=1;
 for ($i = 0; $i < @txt; $i++) {
    ($thisid)= split(/,/, $txt[$i]);
              if ($thisid >= $id) {
          $id=$thisid+1; }}
seek(TXT, 0, 0);
$message = "$id,$toi1,$toi2,<br>\n";
     print TXT $message;
  print TXT @txt;
    $filesize = tell(TXT);        
    truncate(TXT, $filesize);
        close(TXT);
...とプログラムを書きました。
書き込みは行えるのですが、思うようにはいきません。
実行する度に$id(番号)が1づつ増えていくはずだと思うのですが増えずにずっと1のままです。あと、テキストの先頭から書き出したいのですが、どうしても、既にある書き込みの次の行から書き込みをしてしまいます。
unixとwindows 98/NTではちゃんとうまくいくのですが、、、
splitとseekの使い方ってunixサーバーとMacサーバーとでは違うのでしょうか?

問題は書き方にあるのかその他にあるのかも分からないという状況です。
すいません初心者で。
やっとMacでもCGI動作チェックができると思ってたのですが、思うようにいかず困っています。どうか助言を与えて下さい。よろしくお願いします。

perl さんからのコメント
( Wednesday, March 14, 2001 02:12:38 )

これは、applescriptではありませんね。

さいとう さんからのコメント
( Wednesday, March 14, 2001 12:03:27 )

perlさんコメントありがとうございます。
えーっと、MacPerlを使用してます。
すいません説明不足で。

春風はるか さんからのコメント
( Wednesday, March 14, 2001 12:50:05 )

このプログラムは自分で作ったのでしょうか?
もうちょっと、簡単なところから作ったほうが良いと思います。

例えば、

> splitとseekの使い方ってunixサーバーとMacサーバーとでは違うのでしょうか?

ということは、自分で単純なスクリプトを作ってみれば確かめられますよね。
それとも、実際にやってみて違いがあったのでしょうか?

とあるメーリングリストの管理者 さんからのコメント
( Thursday, March 15, 2001 00:54:31 )

perlって奥が深いのでよくわからないのですが,
下記のようにやってみると,とりあえず動くようです.


$inputfile ="MacintoshHD:1.txt";
$toi1="213123";
$toi2="21123";

open (TXT,$inputfile);
@txt = <TXT>;
close(TXT);

$id=1;
for ($i = 0; $i < @txt; $i++) {
  print "$i     $txt[$i]     $id    ";
  ($thisid)= split(/,/, $txt[$i]);
  if ($thisid > $id) {
    $id=$thisid+1; }
  print "$id       $thisid\n";
}
print "\n\n";

open (TXT,">$inputfile");
#   seek(TXT, 0, 0);
$message = "$id,$toi1,$toi2,<br>\n";
print TXT $message;
print TXT @txt;
#   $filesize = tell(TXT);        
#   truncate(TXT, $filesize);
close(TXT);

値をチェックするために適当にprintを入れてあります.

さいとうさんが,どういう目的でMacでMacPerlを動か
そうとしているのかはわかりませんが,サーバのCGI
のための言語だとすると,unixサーバー+perlを選択さ
れるのが無難かと存じます.