基礎言語★ファイルを読み書きしたいよぉ
ファイルは補助記憶装置。
メインの記憶装置となるRAMに比べて使い方にクセがあるものの、大容量の長期記憶ができるのが特徴です。
主な使い方の流れは、
・ファイルをオープンする
このとき、オープンしたファイルの情報を保持しておく
・そのファイルに対して、読み出し/書き込みを行う
読み出しは、先頭側から後方に連続しておこなう
書き込みは、既存ファイルを消して新たに作成か、既存ファイルの最後に追加書き込みをおこなう
途中にアクセスする方法もありますが、ここでは基本だけ例示します
(文章修正2021/01/11)
BASIC
10 '先頭から順にアクセスするファイルはシーケンシャルファイルと呼んでいました
20 '対して、任意の場所にアクセルするファイルはランダムファイルと呼んでいました
30 'フロッピーディスクなど遅いメディアではランダムアクセスは重要でしたが
40 '十分速度が早いメディアではシーケンシャルの効率に軍配が上がることもあります
110 OPEN "I",#1,"testload.txt"
120 WHILE EOF(1)<>-1
130 LINE INPUT #1, STRTMP$
140 PRINT STRTMP$
150 WEND
140 CLOSE #1
210 OPEN "O",#1,"testsave.txt"
220 WRITE#1,"テスト書き込み"
230 CLOSE #1
ExcelVBA
Sub FileOpenTest()
Open "C:\testload.txt" For Input As #1 'ファイル番号1で読み込みモードとしてオープン
Do Until EOF(1) 'End Of Fileまで読み出す
Line Input #1, Stringtemp '一行読み出し
MsgBox (Stringtemp)
Loop
Close #1 'ファイルをクローズ
Open "C:\testsave.txt" For Output As #1 'ファイル番号1で上書きモードとしてオープン
Print #1, "テスト書込み" + Format(Now(), "hh:mm:ss") '一行書込み
Close #1 'ファイルをクローズ
End Sub
C言語
#include <stdio.h>
void main(){
FILE *fp; //ファイルポインタ
char strtmp[256];
//読み込み
if((fp= fopen("testload.txt", "r"))==NULL){ //バイナリ読み込みならばrb
puts("File Open Error");
return;
}
while(fgets(strtmp, 256, fp)!=NULL){ //改行までの1行読み込み(改行含む)
puts(strtmp); //1行表示。改行も付けるので空白行が空く
}
fclose(fp);
//書き込み
if((fp= fopen("testsave.c", "w"))==NULL){ //追加書き込みならばa
puts("File Open Error");
return;
}
fputs("テスト書き込み\n", fp); //一行書き込み。改行は自動で付かない
fclose(fp);
}
Perl
#読み込み
open(FP, "testload.txt");
foreach $strtmp(<FP>){ #ファイルから一行読み出す。ファイルが終わるまで繰り返す
print($strtmp);
}
close(FP);
#書き出し
open(FP, "> testsave.txt"); #「>」がファイル名に付くことで上書き。追加書き込みならば「>>」
print FP "テスト書き込み\n"; #一行書き込み。改行は自動で付かない
close(FP)
Java
import java.io.*; //ファイルの入出力クラス
class FileIO{
public static void main(String args[]) throws Exception, IOException{
//読み込み
FileReader FR;
BufferedReader BR;
String strtmp;
FR= new FileReader("FileIO.java");
BR= new BufferedReader(FR);
try{
while((strtmp= BR.readLine())!=null){
//一行読み込んで出力。改行は無くなるのでprintlnを使った
System.out.println(strtmp);
}
}catch(Exception e){
System.out.println("Error");
}
FR.close();
BR.close();
//書き出し
FileOutputStream FW;
DataOutputStream DW;
FW= new FileOutputStream("testsave.txt");
DW= new DataOutputStream(FW);
DW.writeUTF("テスト書き込み\n");
//日本語を使うならもっと書き方があるみたい
//英数のみならwriteCharとか使えそう
DW.close();
FW.close();
}
}
//注意:例外処理の正しい書き方はいまひとつ分からなかったので適当です
Python
#読み出し
with open("testload.txt", mode='r') as fp: # withを使うopen例。自動でcloseする
for strtmp in fp: #位置行ずつ読み出す。改行含む
print(strtmp) # printで改行が付くので、空白行が空く
#書き込み
with open("testsave.txt", mode='w') as fp: # 追加書き込みならば'a'
fp.write("ファイル書き込み\n") # 一行書き込み。改行は自動で付かない