text processing แบบ csv ในภาษา perl

ตัวอย่างผลแบบ csv
ตัวอย่างผลแบบ csv

มีโอกาสรื้อโค้ดภาษา perl อ่าน course กับ regist
ซึ่งจัดเก็บแบบ csv โดยส่งรหัสนักศึกษา ปี และภาค ไปถาม
แล้วตอบกลับเป็นรายวิชาที่ลงทะเบียน
ทำให้รู้ว่าลงวิชาอะไรไปบ้างในแต่ละภาคเรียน
เป็นเพียงช่วงหนึ่งของ code หลักที่ใช้ทำ transcript
แต่มีเพื่อนต้องการข้อมูลเพียงเท่านี้ไปประมวลผลต่อ
จึงตัด code ออกมาให้เหลือข้อมูลเท่านี้
มีตัวอย่าง code ดังนี้
#!/usr/bin/perl
# ?idstd=1234&yr=2012&sem=1
&parse;
print “Content-type:text/html\n\n”;
open(FILE,”course.txt”); @rec=<FILE>; close(FILE);
foreach $r(@rec) {
@d = split(“,”,$r);
$dd = join ‘,’,$d[2],$d[3],$d[4]; #code, subject name, credit
$scode{$d[0]} = $dd;
}
# ==================
$file = join ”,”regist”, $config{‘yr’} , $config{‘sem’} ,”.txt”;
open(FILE,”$file”); @rec=<FILE>; close(FILE);
foreach $r(@rec) {
@r = split(“\n”,$r);
@d = split(“,”,$r[0]);
if ($config{‘idstd’} eq $d[2]) {  print  $d[1] . “,”.$scode{$d[2]}.”,<br/>”; }
}
# ==================
sub parse {
if ($ENV{‘REQUEST_METHOD’} eq ‘GET’) {
@pairs = split(/&/, $ENV{‘QUERY_STRING’});
} elsif ($ENV{‘REQUEST_METHOD’} eq ‘POST’) {
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
@pairs = split(/&/, $buffer);
}
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
$name =~ s/~!/~!/g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
$value =~ s/~!/~!/g;
$value =~ s/<!–(.|\n)*–>//g;
$config{$name} = $value;
}
}

Author: บุรินทร์ รุจจนพันธุ์

มีอะไรมากมายที่ต้องศึกษา อาทิ seo, script, virus, snw, blog

Leave a Reply