Semalam ada seorang kawan sefakulti mengemukakan satu masalah -
Bagaimanakah caranya menukar data yang terdiri daripada berbilang baris, kepada satu rentetan mengandungi data-data tersebut yang hanya diselangi dengan koma (tanpa penyuntingan)?
Seperti berikut:
Bagaimanakah caranya menukar data yang terdiri daripada berbilang baris, kepada satu rentetan mengandungi data-data tersebut yang hanya diselangi dengan koma (tanpa penyuntingan)?
Seperti berikut:
aaaaabbbbb
ccccc
kepada
aaaaa,bbbbb,ccccc
Satu cara yang boleh digunakan ialah dengan menggunakan fungsi dlm MS-Excell (diperoleh daripada sumber di Youtube, terima kasih Dr. Alfian FSKTM).
Tetapi yang terlintas di fikiran saya ialah dengan menggunakan Perl one-liner. Perl one-liner ialah pembentukan skrip bahasa Perl yang ringkas dan mampu dilaksanakan secara terus menerusi prom arahan atau baris arahan sahaja (berbanding menulis di dalam fail skrip Perl, *.pl)
Tetapi yang terlintas di fikiran saya ialah dengan menggunakan Perl one-liner. Perl one-liner ialah pembentukan skrip bahasa Perl yang ringkas dan mampu dilaksanakan secara terus menerusi prom arahan atau baris arahan sahaja (berbanding menulis di dalam fail skrip Perl, *.pl)
Skrip yang boleh digunakan adalah seperti berikut: ('multilines.txt' mengandungi data input, dan output akan disimpan dalam fail 'output.txt' tanpa mengubah kandungan 'multilines.txt')
perl -e "print(join(',', map{chomp; $_;} <>))" multilines.txt > output.txt
Skrip setara (tanpa kurungan '()'):
perl -e "print join ',', map{chomp; $_;} <>" multilines.txt > output.txt
Skrip di bawah memperoleh hasil yang sama, justeru boleh digunakan sebagai skrip alternatif (sebahagiannya telah diperbaiki oleh Dr. KA, FSKTM):
perl -e "$_ = join (',', <>); s/\n\r?//g; print" multilines.txt > output.txt
Berikut adalah contoh perlaksanaannya dalam prom arahan Windows (arahan 'more' sekadar memperlihatkan kandungan fail input, dan output yang terhasil):
C:\>more multilines.txt
xxxx
yyyy
zzzz
C:\>perl -e "print(join(',', map{chomp; $_;} <>))" multilines.txt > output.txt
C:\>more output.txt
xxxx,yyyy,zzzz
P/s: Bagi yang tidak biasa atau baru menggunakan Perl, pengguna Windows OS kena install penterjemah Perl dahulu (Unix dan Linux sudah ada versi Perl yang dipasang).
[ Kemaskini: 19 Okt 2012 ]
Semua perkataan 'Perl-liner' diubah. Istilah yang sebenar ialah 'Perl one-liner'.
[ Kemaskini: 19 Okt 2012 ]
Semua perkataan 'Perl-liner' diubah. Istilah yang sebenar ialah 'Perl one-liner'.
[ Kemaskini: 9 Sept 2024 ]
Sebenarnya 'Perl-liner' atau 'Perl one-liner' sama saja. Saya gelar 'Perl-baris'.
Alternatif lain (penyelesaian masalah):
perl -e "print join ',', map{s/\s+$//; $_;} <>" multilines.txt > output.txt
.
perl -e "print join ',', map{s/\s+$//; $_;} <>" multilines.txt > output.txt
.
No comments:
Post a Comment