การปรับปรุงแฟ้มด้วยเลขบรรทัด

ปรับปรุง : 2548-02-12 ()

บทเรียน ONLINE : การเขียนภาษา PERL
[ การปรับปรุงแฟ้มด้วยเลขบรรทัด ]

  1. ข้อควรทราบ
  2. การสร้างแฟ้ม แต่ไม่มีข้อมูล
  3. การลบแฟ้ม
  4. เพิ่มระเบียน ต่อท้ายระเบียนสุดท้าย
  5. เรียกข้อมูลมาแสดง
  6. เพิ่มระเบียน ตามเลขบรรทัด
  7. แก้ไขระเบียน ตามเลขบรรทัด
  8. ลบระเบียน ตามเลขบรรทัด
  9. แบบฝึกหัด
ข้อควรทราบ
  1. ในบทนี้ จะกล่างถึงแฟ้มแบบ text ซึ่งมีโครงสร้างธรรมดา ที่ผู้ใช้สามารถดึงข้อมูลจากแฟ้มมาปรับปรุงด้วยตัวเองได้ด้วยโปรแกรม Text editor ทั่วไป เช่น notepad wordpad Q_editor หรือแม้แต่ Microsoft word
  2. ตามหลักการของโครงสร้างแฟ้ม จะประกอบด้วย 5 ส่วนที่ผู้เขียนโปรแกรมต้องทำความเข้าใจ คือ ฐานข้อมูล(Database) แฟ้มหรือไฟล์(File) ระเบียนหรือเรคคอร์ด(Record) เขตข้อมูลหรือฟิลด์(Field) และแต่ละเขตข้อมูลจะประกอบด้วย หน่วยข้อมูล(Item)
  3. บทนี้จะใช้ตัวอย่างเพียงแฟ้มเดียว และในแฟ้มจะใช้ความแตกต่างของบรรทัดแยกระเบียน ซึ่งความแตกต่างของบรรทัดก็คือ carriage return(รหัส ascii คือ 13 ฐาน 10 หรือ 0D ฐาน 16) และ line feed (รหัส ascii คือ 10 ฐาน 10 หรือ 0A ฐาน 16)
  4. ในแต่ละระเบียนของตัวอย่างนี้ จะมีเขตข้อมูลเดียว ซึ่งไม่ได้สนใจว่าจะเก็บอะไร เพราะตัวอย่างสนในการเพิ่ม ลด และแก้ไขข้อมูลในระดับระเบียน และใช้เลขบรรทัดในการควบคุม
  5. แฟ้มที่ถูกสร้างขึ้นจะสามารถนำไปเปิดใน โปรแกรม text editor ได้ทุกตัว และขนาดของแฟ้มก็สามารถคาดการณ์ได้ถูกต้องแม่นยำ เพราะแต่ละบรรทัดจะมีเพียงส่วนของข้อมูล และรหัสตัดบรรทัดอีก 2 byte เท่านั้น
  6. ถ้าข้อมูลมี 2 บรรทัด ๆ ละ 5 ตัวอักษร ก็บอกได้เลขว่าแฟ้มนี้มีขนาด 14 byte [(5 + 2) + (5 + 2)]

การสร้างแฟ้ม แต่ไม่มีข้อมูล
Click here for run /perl/plupdt1.pl
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
open(myfile,">$filename");
close(myfile);
print "Create ok";
โปรแกรมนี้จะสร้างแฟ้ม plupddat.txt ในห้อง perl
ถ้าเคยมีข้อมูลอะไรอยู่ก็จะหายหมด แต่ให้ระวัง
ถ้าแฟ้มที่มี ถูกส่งมาจาก ftp อาจมีปัญหา เรื่องเจ้าของ
แต่ถ้าลบและสร้างขึ้นใหม่ก็จะไม่เห็นปัญหาอะไร
ปัญหาที่อาจเกิดขึ้นคือ update ข้อมูลแล้วไม่เป็นผล

การลบแฟ้ม
Click here for run /perl/plupdt2.pl
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
unlink ("$filename");
print "Delete ok";
โปรแกรมนี้จะลบแฟ้ม plupddat.txt จากห้อง perl
โดยไม่ต้องเตือนว่าจะมีแฟ้มอยู่ หรือไม่

เพิ่มระเบียน ต่อท้ายระเบียนสุดท้าย
จะไม่ขอกล่าวถึงการรับค่าจาก form เพื่อนำค่านั้น
ส่งให้กับ perl แล้วนำไปเพิ่ม เป็นระเบียนใหม่
ผู้ศึกษาน่าจะนำมาต่อกันด้วยหลักการ Common sense ได้
Click here for run /perl/plupdt3.pl
ตัวอย่างผลลัพธ์
Time is Wed Nov  3 00:25:44 1999
Time is Wed Nov  3 00:25:46 1999
Time is Wed Nov  3 00:28:38 1999
Time is Wed Nov  3 00:28:42 1999
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
open(myfile,">>$filename");
$lct = localtime(time);
print myfile "Time is ",$lct,"\n";
close(myfile);
print "Add new record ok";
โปรแกรมนี้จะนำเวลาปัจจุบัน เขียนต่อท้ายบรรทัดเดิม
เมื่อสั่ง run 1 ครั้งข้อมูลในแฟ้ม plupddat.txt
ก็จะถูกเพิ่มอีก 1 บรรทัด ทำให้แฟ้มมีจำนวนบรรทัดเพิ่มขึ้น

เรียกข้อมูลมาแสดง
เพื่อจะได้ดูข้อมูล และผลการเปลี่ยนแปลงของแฟ้ม
เรียกโปรแกรม perl ให้ไปอ่านแฟ้มมาแสดง

Click here to read file
#!/usr/local/bin/perl
print"Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
print "<pre>";
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
print @getrec;
ผลของโปรแกรมนี้จะนำข้อมูลที่อยู่ใน plupddat.txt
มาพิมพ์ทั้งหมด โดยไม่จัดรูปแบบ หรือแยกบรรทัด

เพิ่มระเบียน ตามเลขบรรทัด



Click here for open this form sample
<form method=post action=/perl/plupdt4.pl>
<input type=text name=num><br>
<input type=text name=txt><br>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรมในส่วนของ plupdt4.pl เป็นดังนี้
#!/usr/local/bin/perl
$getid = <STDIN>;
@getrec = split /&/,$getid;
($n1,$v1) = split /=/,$getrec[0];
($n2,$v2) = split /=/,$getrec[1];
print"Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
print "<pre>";
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
$cntrec = @getrec;
unlink("$filename");
open(myfile,">$filename");
for $i (0 .. $cntrec-1) {
$id = $i + 1;
if ($v1 eq $id) { print myfile $v2,"\n"; }
print myfile $getrec[$i];
}
close(myfile);
print "add new ok"

แก้ไขระเบียน ตามเลขบรรทัด



Click here for open this form sample
<form method=post action=/perl/plupdt6.pl>
<input type=text name=num><br>
<input type=text name=txt><br>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรมในส่วนของ plupdt6.pl เป็นดังนี้
#!/usr/local/bin/perl
$getid = <STDIN>;
@getrec = split /&/,$getid;
($n1,$v1) = split /=/,$getrec[0];
($n2,$v2) = split /=/,$getrec[1];
print"Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
print "<pre>";
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
$cntrec = @getrec;
unlink("$filename");
open(myfile,">$filename");
for $i (0 .. $cntrec-1) {
$id = $i + 1;
if ($v1 eq $id) {
print myfile $v2,"\n"; } else {
print myfile $getrec[$i];
} # if
} # for
close(myfile);
print "edit ok"

ลบระเบียน ตามเลขบรรทัด


Click here for open this form sample
<form method=post action=/perl/plupdt7.pl>
<input type=text name=num><br>
<input type=submit value=submit>
<input type=reset value="clear it">
</form>
โปรแกรมในส่วนของ plupdt7.pl เป็นดังนี้
#!/usr/local/bin/perl
$getid = <STDIN>;
@getrec = split /&/,$getid;
($n,$v) = split /=/,$getrec[0];
print"Content-type:text/html\n\n";
$filename = join '',"/data1/hm/thaiall.com","/perl/plupddat.txt";
print "<pre>";
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
$cntrec = @getrec;
unlink("$filename");
open(myfile,">$filename");
for $i (0 .. $cntrec-1) {
$id = $i + 1;
if ($v ne $id) { print myfile $getrec[$i]; }
} # for
close(myfile);
print "delete ok"

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้เขียนโปรแกรม ตามตัวอย่างทั้ง 7 นี้ และให้ใช้งานได้
  2. ทำเหมือนข้อ 1 แต่ให้รับภาษาไทยได้ เพราะตัวอย่างทั้งหมดนี้ใช้ภาษาไทย แล้วมีปัญหา
  3. จากข้อ 2 ให้ปรับปรุง ส่วน html ให้ดูดี เป็นระเบียน สวยงาม และอยู่ในหน้าเดียวกัน
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223