การปรับปรุงแฟ้มข้อความ
การปรับปรุงข้อมูลแบบตามลำดับ (Sequential Processing) คือการอ่านข้อมูลจากแฟ้มข้อมูลทีละระเบียนมาเก็บไว้ในสื่อ เช่น อาร์เรย์ หรือเทปแม่เหล็ก เป็นต้น จากนั้นจึงปรับปรุงข้อมูลในอาร์เรย์จนแล้วเสร็จ แล้วนำข้อมูลทั้งหมดกลับไปเขียนทับลงในแฟ้มข้อมูลเดิม ทำให้แฟ้มข้อมูลมีข้อมูลใหม่ที่ได้รับการปรับปรุง
คลาสที่เกี่ยวข้องกับการอ่านแฟ้มข้อมูล
FileReader fin = new FileReader(“input.txt”);
BufferedReader bin = new BufferedReader (fin);
คลาสที่เกี่ยวข้องกับการเขียนลงแฟ้มข้อมูล
FileOutputStream fout = new FileOutputStream(“output.txt”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
ตัวอย่าง 7.29 การสร้างแฟ้มและเพิ่มข้อมูลทีละตัวอักษร
– คลาส FileOutputStream ไม่มี print หรือ println ให้ใช้
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
FileOutputStream fout = new FileOutputStream(“d.txt”);
fout.write(‘a’);
fout.write(65); // A
fout.close();
}
}
ตัวอย่าง 7.30 การสร้างแฟ้มและเพิ่มข้อมูลทีละอาร์เรย์
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
byte a[] = {‘a’,’b’,’c’,’d’,’e’};
FileOutputStream fout = new FileOutputStream(“d.txt”);
fout.write(a);
fout.close();
}
}
ตัวอย่าง 7.31 การสร้างแฟ้มและเพิ่มข้อมูลทีละบรรทัด
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
FileOutputStream fout = new FileOutputStream(“d.txt”);
PrintStream pout = new PrintStream(fout);
pout.println(“101,Mr.Koanchanok Narittom,2500”);
pout.println(“102,Ms.Kyle Burin,10000”);
pout.close();
}
}
ตัวอย่าง 7.32 การสร้างแฟ้มและเพิ่มข้อมูลทีละบรรทัด
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
FileOutputStream fout = new FileOutputStream(“d.txt”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
pout.println(“101,Mr.Koanchanok Narittom,2500”);
pout.println(“102,Ms.Kyle Burin,10000”);
pout.println(“103,Ms.Sala Romeo,55000”);
pout.println(“104,Mr.Jib Jibjib,1000”);
pout.println(“105,Ms.Maya Noar,3500”);
pout.close();
System.out.println(“Create 5 records : completely”);
}
}
ตัวอย่าง 7.33 การเพิ่มข้อมูล
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
String bufid =“123“;
String bufname=”tom”;
String bufsalary=”5000″;
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“d.txt”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
int tot = i;
//
FileOutputStream fout = new FileOutputStream(“d.txt”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
pout.println(ar[i]);
i = i + 1;
}
pout.println(bufid + “,” + bufname + “,” + bufsalary);
pout.close();
System.out.println(“Insert : completely”);
}
}
ตัวอย่าง 7.34 การลบข้อมูล
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
String bufid = “123”;
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“d.txt”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
int tot = i;
//
FileOutputStream fout = new FileOutputStream(“updtxt.dat”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
if (bufid.equals(ar[i].substring(0,3))) {
System.out.println(“Delete : completely”);
} else {
pout.println(ar[i]);
}
i = i + 1;
}
pout.close();
System.out.println(“Delete : completely”);
}
}
ตัวอย่าง 7.35 การแก้ไขข้อมูล
import java.io.*;
class x {
public static void main (String args[]) throws IOException {
String bufid =”123″;
String bufname=”newtom”;
String bufsalary=”10000″;
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“d.txt”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
int tot = i;
//
FileOutputStream fout = new FileOutputStream(“d.txt”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
if (bufid.equals(ar[i].substring(0,3))) {
pout.println(bufid + “,” + bufname + “,” + bufsalary);
System.out.println(“Update : completely”);
} else {
pout.println(ar[i]);
}
i = i + 1;
}
pout.close();
}
}
ตัวอย่าง 7.36 การปรับปรุงข้อมูลที่เชื่อมโยงผ่านระบบเมนู
import java.io.*;
import java.lang.*;
import java.util.regex.*; // ใช้ class Pattern และ Matcher เพื่อแทนที่ตัวอักษร
class updtxt {
static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
// โปรแกรมหลักที่เริ่มทำงานและคุมการทำงานทั้งหมด
public static void main(String args[]) throws IOException {
String waitopt;
String buf;
waitopt=”Wait your choice [menu, bye, 0, 1, 2, 3, 4, 5, 6, 7, 8] : “;
displaymenu();
System.out.print(waitopt);
buf = stdin.readLine();
while (!buf.equals(“0”)) {
if (buf.equals(“0”) || buf.equals(“bye”)) {
System.out.println(“Bye Bye”);
break;
} else if (buf.equals(“1″)) {
create5();
buf = ” “;
} else if (buf.equals(“2”) || buf.equals(“l”)) {
list(“updtxt.dat”);
buf = ” “;
} else if (buf.equals(“3″)) {
listnum();
buf = ” “;
} else if (buf.equals(“4″)) {
converttohtm();
buf = ” “;
} else if (buf.equals(“5”) || buf.equals(“e”)) {
editnamesalary();
buf = ” “;
} else if (buf.equals(“6”) || buf.equals(“d”)) {
deleteonid();
buf = ” “;
} else if (buf.equals(“7”) || buf.equals(“a”)) {
addnew();
buf = ” “;
} else if (buf.equals(“8”) || buf.equals(“s”)) {
totalsalary();
buf = ” “;
} else if (buf.equals(“menu”) || buf.equals(“m”)) {
displaymenu();
buf = ” “;
} else {
System.out.print(waitopt);
buf = stdin.readLine();
// buf = (char)System.in.read(); // for 1 character
}
}
}
// แสดงตัวเลือก
static void displaymenu () {
System.out.println(“0 : bye bye”);
System.out.println(“1 : Create 3 fields, 5 records for updtxt.dat”);
System.out.println(“2 : List all records”);
System.out.println(“3 : List with line numbers”);
System.out.println(“4 : Convert updtxt.dat to updtxt.htm”);
System.out.println(“5 : Edit name, salary on id”);
System.out.println(“6 : Delete on id”);
System.out.println(“7 : Add new record”);
System.out.println(“8 : Total salary”);
}
// สร้างแฟ้มและระเบียนตัวอย่าง 5 ระเบียน
public static void create5 () throws IOException {
FileOutputStream fout = new FileOutputStream(“updtxt.dat”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
pout.println(“101,Mr.Koanchanok Narittom,2500”);
pout.println(“102,Ms.Kyle Burin,10000”);
pout.println(“103,Ms.Sala Romeo,55000”);
pout.println(“104,Mr.Jib Jibjib,1000”);
pout.println(“105,Ms.Maya Noar,3500”);
System.out.println(“Create 5 records : completely”);
pout.close();
}
// อ่านระเบียนข้อมูลมาแสดงผล
public static void list (String f) throws IOException {
int n = 0;
byte b[] = new byte[128];
FileInputStream fin = new FileInputStream(f);
while ((n = fin.read(b)) != -1) {
for(int i=0;i<n;i++) {
System.out.print((char)b[i]);
}
}
fin.close();
}
// อ่านระเบียนข้อมูลมาแสดง โดยรับชื่อแฟ้มจากแป้นพิมพ์ และแสดงเลขบรรทัด
public static void listnum () throws IOException {
String buf;
System.out.print(“Wait filename to listing : “);
buf = stdin.readLine();
int n = 0;
int l = 1;
byte b[] = new byte[125];
FileInputStream fin = new FileInputStream(buf);
System.out.print(l + ” : “);
l = l + 1;
while ((n = fin.read(b)) != -1) {
for(int i=0;i<n;i++) {
if (b[i] != 13) {
if (b[i] == 10) {
System.out.println();
System.out.print(l + ” : “);
l = l + 1;
} else System.out.print((char)b[i]);
}
}
}
fin.close();
System.out.println(); System.out.println(“======”);
}
// อ่านระเบียนข้อมูลแล้วเขียนลงแฟ้มใหม่ในรูปของ HTML
public static void converttohtm () throws IOException {
int i = 1;
String b;
//
FileReader fin = new FileReader(“updtxt.dat”);
BufferedReader bin = new BufferedReader (fin);
// in j0605.java will use character
FileOutputStream fout = new FileOutputStream(“updtxt.htm”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
//
pout.println(“<style type=’text/css’>”);
pout.println(“td{font-family:fixedsys;font-size:10pt;}”);
pout.println(“</style>”);
pout.println(“<body bgcolor=red><table width=90% bgcolor=yellow>”);
while ((b = bin.readLine()) != null) {
// String bnew = b.replace(‘a’, ‘A’);
Pattern pattern = Pattern.compile(“&”);
Matcher matcher = pattern.matcher(b);
b = matcher.replaceAll(“&”);
//
pattern = Pattern.compile(“>”);
matcher = pattern.matcher(b);
b = matcher.replaceAll(“>”);
//
pattern = Pattern.compile(“<“);
matcher = pattern.matcher(b);
b = matcher.replaceAll(“<”);
//
pattern = Pattern.compile(” “);
matcher = pattern.matcher(b);
b = matcher.replaceAll(“ ”);
pout.println(“<tr>”);
pout.println(“<td>”+i+”</td>”);
pout.println(“<td>”+b+”</td>”);
pout.println(“</tr>”);
i = i + 1;
}
pout.println(“</table></body>”);
fin.close();
pout.close();
System.out.println(“Use IE to open updtxt.htm”);
}
// แก้ไขเงินชื่อและเงินเดือนตามรหัส
public static void editnamesalary () throws IOException {
String bufid,bufname,bufsalary;
System.out.print(“Wait id : “);
bufid = stdin.readLine();
System.out.print(“Wait name : “);
bufname = stdin.readLine();
System.out.print(“Wait salary : “);
bufsalary = stdin.readLine();
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“updtxt.dat”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
//
int tot = i;
FileOutputStream fout = new FileOutputStream(“updtxt.dat”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
if (bufid.equals(ar[i].substring(0,3))) {
pout.println(bufid + “,” + bufname + “,” + bufsalary);
System.out.println(“Update : completely”);
} else {
pout.println(ar[i]);
}
i = i + 1;
}
pout.close();
}
// ลบข้อมูลตามรหัส
public static void deleteonid () throws IOException {
String bufid;
System.out.print(“Wait id : “);
bufid = stdin.readLine();
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“updtxt.dat”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
//
int tot = i;
FileOutputStream fout = new FileOutputStream(“updtxt.dat”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
if (bufid.equals(ar[i].substring(0,3))) {
System.out.println(“Delete : completely”);
} else {
pout.println(ar[i]);
}
i = i + 1;
}
pout.close();
}
// เพิ่มข้อมูลใหม่
public static void addnew () throws IOException {
String bufid,bufname,bufsalary;
System.out.print(“Wait id : “);
bufid = stdin.readLine();
System.out.print(“Wait name : “);
bufname = stdin.readLine();
System.out.print(“Wait salary : “);
bufsalary = stdin.readLine();
String b;
String ar[] = new String[10];
FileReader fin = new FileReader(“updtxt.dat”);
BufferedReader bin = new BufferedReader (fin);
int i = 0;
while ((b = bin.readLine()) != null) {
ar[i] = b;
i = i + 1;
}
fin.close();
//
int tot = i;
FileOutputStream fout = new FileOutputStream(“updtxt.dat”);
BufferedOutputStream bout = new BufferedOutputStream(fout,1024);
PrintStream pout = new PrintStream(bout);
i = 0;
while (i < tot) {
pout.println(ar[i]);
i = i + 1;
}
pout.println(bufid + “,” + bufname + “,” + bufsalary);
System.out.println(“Insert : completely”);
pout.close();
}
// แสดงผลรวมเงินเดือน
public static void totalsalary () throws IOException {
String b,fld[];
FileReader fin = new FileReader(“updtxt.dat”);
BufferedReader bin = new BufferedReader (fin);
int i = 0,total = 0;
while ((b = bin.readLine()) != null) {
fld = b.split(“,”);
total = total + Integer.parseInt(fld[2]);
i = i + 1;
}
fin.close();
System.out.println(“Total salary = ” + total);
}
}