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の入れ子をすることはできないのでしょうか?
とりあえずコンパイルできないよね…
ひろむさんが考えてる処理は可能です。
エラー原因はファイル番号かな。|o_o;
まずその手法を入れ子といえるのかどうかがわからない
インデントを付けるなら
Open 読み込みファイル
Open 書き込みファイル
Do 読み込みファイルの最後まで
読み込み
書き込み
Loop ←これがないからガッさんはコンパイルできないと言ってるのね
Close 書き込みファイル
Close 読み込みファイル
がいいかなぁと思う
次にファイル番号不正は・・・
KGさんが言ってる通り
一箇所番号の記述の仕方でおかしい所があると思われます
不正エラーが出て色が変わった行がその対象行だから
すぐわかるよね
とりあえず、示された例を見る限り、インデントは変だけど、
Openは「入れ子」になっていません。
http://www.atmarkit.co.jp/icd/root/86/76920386.html
Do Untilのループ内でOpenしてるなら「入れ子」かも。
ファイル番号はPC内でユニークである必要があるはずなので、
他のプロセスで使用していない空き番号を調べて取得しましょう。
具体的には、FreeFileで。
ありがとうございます。
皆さんのおかげで解決することができました。
確かに入れ子にはなってませんね。
入れ子というものを勘違いしていました。
> ファイル番号はPC内でユニークである必要があるはずなので、
> 他のプロセスで使用していない空き番号を調べて取得しましょう。
違います。「アプリ内でユニーク」です。
同じプロセスでは、同じ番号を使って同時にOpenする事はできませんが、
プロセスが異なる場合は、同じ番号を使ってファイルをOpenする事ができます。
> 具体的には、FreeFileで。
ちなみに、FreeFile関数の引数を省略した場合には、
FreeFile(0) と記述した場合と同じ結果になります。
同時に開くファイル数が多い場合には、FreeFile(1) も併用する必要が
ありますが、それでもファイル番号が不足する場合には、FileSystemObject の
使用を検討してみてください。
# もっとも、そんなに大量のファイルを開く機会は、そうそうないでしょうけれども。(^^;
ツイート | ![]() |