カウンターを作ろうとしてるんですけど、入出力共用が出来ないんです。
その部分は
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;
ってやると動きます。別にこれでもいいんですが、本には共用出来ると書いてあるのに出来ない、なんかすっきりしません。
入出力共用って出来ないんでしょうか?
No.1ベストアンサー
- 回答日時:
共用オープンはプロでもそうそうには使いません。
面倒臭いんで。まあ、使う人は使うかもしれませんが。
ファイルの操作には、「現在操作位置」というものがあります。いわゆる「シーク位置」と呼ばれるものです。
たとえば、4行のテキストファイルを順に読み出すと、1行ずつ順番に読まれます。途中で2行同じものが入ってきたりはしません。
これはなぜかというと、1回読み込みを行うと、プログラムが自動的にシーク位置を次の行へ移動してくれるからです。
また、書き込みのときも同様で、「書き込み位置」をシステムが自動的に管理してくれています。
しかし、入出力共用オープンの場合、これをプログラマーがやってあげなければいけません。
たとえば質問の例だと、オープンした時点では「書き込み位置」が定義されていないので、プログラムは混乱してあらぬところにデータを書き込むとか、まったく書き込まなかったりとかしてしまいます。
ですので、プログラマーがどこに書き込むかを指定してあげるのです。
open INOUT, "+<$txt";
$count = <INOUT>;
$count++;
seek(INOUT, 0, 0);
print INOUT $count;
close INOUT;
それから、読み書き共用モードの指定は「+<」こうです。
「+>」これだとファイルの内容が壊れますのでご注意を。
まあ、プログラムをすっきりさせる意味で、共用モードはあんまり使わない方がいいかもしれません。好きずきですが。
そうだったんですか、ありがとうございます。
素直に読み込みが終わった後に、また書き込むようにします。
seek関数ってそういうときに使うんですね、本で読んだけどいつ使うのかよく分から無かったんですよ。
ちなみに、僕が読んだ本だと「+>」になってました。(笑)
それでは、丁寧な回答ありがとうございました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- その他(プログラミング・Web制作) Pythonの質問です テキストファイルをこのように自動生成したいのですがどうすれば良いでしょうか. 2 2022/08/25 21:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
while文がうまく動かない
-
連番のファイルを何個も開きたい
-
Pythonでegrep機能をつかいたい
-
[perl] もっとシンプルに改良、...
-
文字列をカウントする方法
-
ファイル全てを .xlsm に変更し...
-
一定時間が経過したフォルダの削除
-
csvファイルの横方向への改行に...
-
while(<ハンドラ>) {} で行数を...
-
画像アップロード機能を追加し...
-
batファイルでrenameができませ...
-
VBAでCSVファイルの特定行を書...
-
MATLABのm-fileについて
-
配列のサイズを動的に拡張
-
ディレクトリのファイル作成を...
-
ANSI Cでファイル名、ディレク...
-
VB6.0でDB接続する際に切断時の...
-
Pythonの再帰関数の動作の流れ...
-
AutoCADのスクリプト
-
C++でファイルから複数行のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Fortranで1行飛ばして読み込む方法
-
perlで指定範囲を複数ファイル...
-
Pythonでegrep機能をつかいたい
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
テキストファイルの各行を配列...
-
Perlのワンライナーをスクリプ...
-
ifstream を利用した1行分のテ...
-
C++でのテキストファイル読み込...
-
perlプログラム 外部複数ファ...
-
system関数と引数について
-
Perl 重複カウント 上位3名
-
Pythonで非日本語のUnicode文字...
-
shellのコマンド deffの差分の...
-
perlで先頭の数値をみて昇順に...
-
Visual Basicを使って三平方の...
-
while文がうまく動かない
-
Perl Grepについて
-
Perlによるディレクトリ内の連...
おすすめ情報