OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

入出力共用が出来ないんです

  • 困ってます
  • 質問No.148776
  • 閲覧数30
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 57% (11/19)

カウンターを作ろうとしてるんですけど、入出力共用が出来ないんです。
その部分は

open INOUT, "+>$txt";       #$txtはテキストファイルへのアドレス
$count = <INOUT>;
$count++;
print INOUT $count;
close INOUT;

ってやっています。ここだけコマンドプロンプトで試しているんですが、上手く動きません。"+>$txt"を"+<$txt"としたり、">+$txt"にしたり、最後には、">+<$txt"といろいろ試したんですがダメでした。
ちなみに

open IN, "<$txt";
$count = <IN>;
close IN;
$count++;
open OUT, ">$txt";
print OUT $txt;
close OUT;

ってやると動きます。別にこれでもいいんですが、本には共用出来ると書いてあるのに出来ない、なんかすっきりしません。
入出力共用って出来ないんでしょうか?
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

 共用オープンはプロでもそうそうには使いません。
 面倒臭いんで。まあ、使う人は使うかもしれませんが。

 ファイルの操作には、「現在操作位置」というものがあります。いわゆる「シーク位置」と呼ばれるものです。

 たとえば、4行のテキストファイルを順に読み出すと、1行ずつ順番に読まれます。途中で2行同じものが入ってきたりはしません。
 これはなぜかというと、1回読み込みを行うと、プログラムが自動的にシーク位置を次の行へ移動してくれるからです。

 また、書き込みのときも同様で、「書き込み位置」をシステムが自動的に管理してくれています。

 しかし、入出力共用オープンの場合、これをプログラマーがやってあげなければいけません。
 たとえば質問の例だと、オープンした時点では「書き込み位置」が定義されていないので、プログラムは混乱してあらぬところにデータを書き込むとか、まったく書き込まなかったりとかしてしまいます。

 ですので、プログラマーがどこに書き込むかを指定してあげるのです。

open INOUT, "+<$txt";
$count = <INOUT>;
$count++;
seek(INOUT, 0, 0);
print INOUT $count;
close INOUT;

 それから、読み書き共用モードの指定は「+<」こうです。
 「+>」これだとファイルの内容が壊れますのでご注意を。

 まあ、プログラムをすっきりさせる意味で、共用モードはあんまり使わない方がいいかもしれません。好きずきですが。
お礼コメント
zeyper

お礼率 57% (11/19)

そうだったんですか、ありがとうございます。
素直に読み込みが終わった後に、また書き込むようにします。
seek関数ってそういうときに使うんですね、本で読んだけどいつ使うのかよく分から無かったんですよ。
ちなみに、僕が読んだ本だと「+>」になってました。(笑)
それでは、丁寧な回答ありがとうございました。m(_ _)m
投稿日時 - 2001-10-11 13:36:30
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ