Certification: วันที่ 2 คำถามเกี่ยวกับ sy-tabix

Day 2 [This is Questions of ABAP Certification.]

>> An internal table ICODE contains the following entries:

field1     field2
———————-
Jenjira 1234567
Anuchit 2347899
Somkiat 7654321
Chaiwat 1000000

IF NOT icode[] IS INITIAL.
SORT icode BY field1 DESCENDING.
READ TABLE icode WITH KEY field1 = ‘Somkiat’.
WRITE: / sy-tabix.
ENDIF.

What is the output of the above code after execution?

a) 1
b) 2
c) 3
d) 4
e) Somkiat
f) Anuchit
g) No answer.

Answer

เฉลยนะครับ ตอบข้อ a) 1 นะครับ
เรามาไล่ดู code กันนะครับ ว่าทำไหมถึงได้ข้อ a)
เริ่มแรกโจทย์กำหนดให้ internal table ICOD มีค่าตามนี้
field1     field2
———————
Jenjira 1234567
Anuchit 2347899
Somkiat 7654321
Chaiwat 1000000

IF NOT icode[] IS INITIAL.
คำสั่งข้างบนเป็นคำสั่งแบบมีเงื่อนไข โดยคำสั่งนี้ ต้องการแค่คำตอบว่าใช่หรือไม่ใช่
ถ้าใช่ให้ทำ ถ้าไม่ใช่ก็ให้ออกจากเงื่อนไข ซึ่งเงื่อนไขในคำสั่งนี้คือ
ถ้า internal table icode ไม่เท่ากับค่าว่างให้ทำ

SORT icode BY field1 DESCENDING.
คำสั่งนี้ เป็นการเรียงลำดับ field1 จากมากไปหาน้อย

READ TABLE icode WITH KEY field1 = ‘Somkiat’.
คำสั่งนี้ เป็นการอ่านค่าใน internal table ICODE โดยมีเงื่อนไขว่า field1 เท่ากับ Somkiat

WRITE: / sy-tabix.
คำสั่งนี้ เป็นการแสดงผลที่หน้าจอ โดยแสดงหมายเลขอันดับของ Internal Table ที่ pointer ได้ชี้ไปตามเงื่อนไขในคำสั่งก่อนหน้านี้แล้วทำไหม ถึงแสดงได้ ค่า 1

สาเหตุเกิดจาก จากเดิมนั้น ตำแหน่ง pointer ของ Internal Table ICODE น่าจะอยู่ที่ 4 เพราะมีข้อมูลอยู่ 4 อันดับ ถ้าดูจากข้อมูลที่โจทย์ให้มากนะครับ

โดยเรียงอันดับ ตำแหน่ง pointe ได้ดังนี้

อันดับ 1 Jenjira 1234567
อันดับ 2 Anuchit 2347899
อันดับ 3 Somkiat 7654321
อันดับ 4 Chaiwat 1000000

หลังจากนั้น มีคำสั่งเรียงลำดับตาม field1จากมากไปหาน้อย จึงทำให้ อันดับ ตำแหน่ง pointe เปลี่ยนแปลงได้ดังนี้
อันดับ 1 Somkiat 7654321
อันดับ 2 Jenjira 1234567
อันดับ 3 Chaiwat 1000000
อันดับ 4 Anuchit 2347899

ทำไหมถึงเรียงได้ตามนี้เพราะว่า field1 นั้นเป็น field ที่เก็บค่าตัวอักษรภาษาอังกฤษ และค่าอักษรภาษาอังกฤษนั้นเรียงจากมากไปหาน้อยคือ Z-Aหลังจากนั้น มีคำสั่งที่อ่านค่า  Internal table โดยมีเงื่อนไข field1 เท่ากับ Somkiat จึงทำให้ pointe นั้นชี้ไปที่ Somkiat
ดังนั้น ตำแหน่ง pointe คือ 1