ファイルのOPEN 入れ子にすると?

解決


ひろむ  2006-01-31 20:57:26  No: 129970

Open "D:\output.txt" For Output As #1
    open "C:\input.txt" For Input As #2
        Do Until EOF(#2)
            Input #2, str
            Print #1, str
    Close #2
Close #1

input.txtを読み込んでoutput.txtファイルに書き出す。
という処理を上のコードのように書いてみました。
input.txtファイルは複数行の文字が保存されています。

実行すると「ファイル名またはファイル番号が不正です。」とでます。
OPENの入れ子をすることはできないのでしょうか?


ガッ  2006-01-31 21:13:18  No: 129971

とりあえずコンパイルできないよね…


KG  2006-01-31 21:27:34  No: 129972

ひろむさんが考えてる処理は可能です。

エラー原因はファイル番号かな。|o_o;


葉月α  2006-01-31 21:40:16  No: 129973

まずその手法を入れ子といえるのかどうかがわからない
インデントを付けるなら

Open 読み込みファイル
Open 書き込みファイル

Do 読み込みファイルの最後まで
    読み込み
    書き込み
Loop ←これがないからガッさんはコンパイルできないと言ってるのね

Close  書き込みファイル
Close  読み込みファイル

がいいかなぁと思う

次にファイル番号不正は・・・
KGさんが言ってる通り
一箇所番号の記述の仕方でおかしい所があると思われます
不正エラーが出て色が変わった行がその対象行だから
すぐわかるよね


もげ  2006-01-31 22:10:21  No: 129974

とりあえず、示された例を見る限り、インデントは変だけど、
Openは「入れ子」になっていません。
http://www.atmarkit.co.jp/icd/root/86/76920386.html
Do Untilのループ内でOpenしてるなら「入れ子」かも。

ファイル番号はPC内でユニークである必要があるはずなので、
他のプロセスで使用していない空き番号を調べて取得しましょう。
具体的には、FreeFileで。


ひろむ  2006-01-31 22:23:10  No: 129975

ありがとうございます。
皆さんのおかげで解決することができました。


ひろむ  2006-01-31 22:24:28  No: 129976

確かに入れ子にはなってませんね。
入れ子というものを勘違いしていました。


魔界の仮面弁士  2006-01-31 22:28:21  No: 129977

> ファイル番号はPC内でユニークである必要があるはずなので、
> 他のプロセスで使用していない空き番号を調べて取得しましょう。
違います。「アプリ内でユニーク」です。

同じプロセスでは、同じ番号を使って同時にOpenする事はできませんが、
プロセスが異なる場合は、同じ番号を使ってファイルをOpenする事ができます。

> 具体的には、FreeFileで。
ちなみに、FreeFile関数の引数を省略した場合には、
FreeFile(0) と記述した場合と同じ結果になります。

同時に開くファイル数が多い場合には、FreeFile(1) も併用する必要が
ありますが、それでもファイル番号が不足する場合には、FileSystemObject の
使用を検討してみてください。

# もっとも、そんなに大量のファイルを開く機会は、そうそうないでしょうけれども。(^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加