• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルになにも入っていないのを確認して・・・)

テキストファイルに何も入っていない場合、変数に値を入れる方法

このQ&Aのポイント
  • テキストファイルには最初はデータが入っていないので、変数に値を入れる際には注意が必要です。
  • テキストファイルの内容を読み込む際には、事前にデータの存在を確認し、それに応じて変数への代入を行うことが重要です。
  • 具体的な方法としては、テキストファイルの内容を読み込む前に、if文でデータの有無をチェックし、データが存在しない場合には変数に0を代入するようにします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

> if( !$_ ) > ↑で$_の中に値が入っているかどうかわかるでしょうか? 下にも書いたように、このループ内ではありえません。つまりここは永遠に実行されません(真になることはない)。 なぜなら、foreach (@txt) という文は配列@txtの「要素一つ一つに対して」処理をするループだからです。要素が無いなら1回もループしません。 > ためしに > if(@txt)やif(!@txt)ですと、値が入っているか > 判明した感じがします。 上記のif文がループの外(ループの前)なら有効です。 > 最後のレコードIDを取得するにはどうすればよいやら? > データは > 4,・・・ > 3,・・・ > 2,・・・ > 1,・・・ > 0,・・・ > という形で保存されています。 > ループで回していくと最後のidは0になってしまいます。 それで良いのでは? ちゃんと「最後のレコードID」が取得できているように見えますが…。 もしかして、「最後のレコードID」ではなくて「レコードIDの最大値」を取得して、1を加えて新レコードのIDを生成したい、という意味ですか? それなら、 $new_id = -1; foreach (@txt) { chomp; ($id, $tonum, $c_date, $c_status, $chkbox) = split(/,/); if ($id > $new_id){ $new_id = $id;} } $new_id++; # ★新レコードを追加する $new_rec = join(',', ($new_id, $num, $date, $status, $chk)); push (@txt, $newmsg); という感じです。 上記★の時点で、「$idの最大値に1を加えたもの」が$new_idに入っています。もし@txtが空だった場合は0が入っています。

noname#102619
質問者

お礼

回答ありがとうございました。お礼おそくなりました。おかげさまで上記の方法で$new_idを取得することができました。

その他の回答 (2)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

正直、ロジックがさっぱり解らないので参考ですが…、以下の部分、 foreach (@txt) ↑これは、配列@txtの「要素一つ一つに対して」処理をするループです。 ですから、 if( !$_ ){ $id = 0;} ↑『もし要素が無かったら』というようなことは、このループ内でありえないです。 つまりここは永遠に実行されません。 $id は連番にしたい(先頭はゼロ)ということなら、 -------------- $id = 0; foreach (@txt) {   各レコード処理   $id++; } ★ -------------- とすれば、ループを抜けた★の位置では、$idの中身は、 ・@txtが空だったときは、ゼロのまま ・@txtにレコードが入っていたときは、最後のレコードIDに1を加えたもの→新しく追加するレコードには、このIDを使えば良い というようになります。

noname#102619
質問者

お礼

>正直、ロジックがさっぱり解らないので参考ですが…、以下の部分 それは失礼しました。 変数の中に配列や文字が入っているかどうかを試すif文を作りたかったのです。 if( !$_ ) ↑で$_の中に値が入っているかどうかわかるでしょうか? ためしに if(@txt)やif(!@txt)ですと、値が入っているか 判明した感じがします。 >最後のレコードIDに1を加えたもの はい。 最後のレコードIDを取得するにはどうすればよいやら? データは 4,・・・ 3,・・・ 2,・・・ 1,・・・ 0,・・・ という形で保存されています。 ループで回していくと最後のidは0になってしまいます。 そこで質問文のような方法でループで最初のidを 取ろうと思ったわけです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

実際のプログラムを補足していただけますか

関連するQ&A