版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
-數(shù)據(jù)類型和對象
在ABAP中,可以使用與標準數(shù)據(jù)聲明相似的語法處理數(shù)據(jù)類型,而與數(shù)據(jù)對象無關(guān)。
在程序中必須聲明要使用的全部數(shù)據(jù)對象。聲明過程中,必須給數(shù)據(jù)對象分配屬性,其
中最重要的屬性就是數(shù)據(jù)類型。
1.1基本數(shù)據(jù)類型
數(shù)據(jù)類型默認大小有效大小初始值說明
C11-65535SPACE文本、字符(字母數(shù)字字符)
D88'000000005日期(格式:YYYYMMDD)
F880浮點數(shù)
I440整型(整數(shù))
N11-65535'00...o'數(shù)字文本
P81-160壓縮號
T66,OOOOOO'時間(格式:HHMMSS)
X11-65535X'00'十六進制
對算術(shù)運算的非整型結(jié)果(如分數(shù))進行四舍五入,而不是截斷。
類型P數(shù)據(jù)允許在小數(shù)點后有數(shù)字。有效大小可以是從1到16字節(jié)的任何值。將兩
個十進制數(shù)字壓縮到一個字節(jié),而最后一個字節(jié)包含一個數(shù)字和符號。在小數(shù)點后最多允許
14個數(shù)字。
1.2系統(tǒng)定義的數(shù)據(jù)對象
SPACE空白字符串
SY-SUBRC系統(tǒng)執(zhí)行傳回值,0表示成功
SY-UNAME用戶
SY-DATUM系統(tǒng)日期
SY-UZEIT系統(tǒng)時間
SY-TCODE當前執(zhí)行程序的Transactioncode
SY-INDEX當前LOOP循環(huán)過的次數(shù)
SY-TABIX當前處理的是InternalTable(內(nèi)部表)的第幾行
SY-TMAXLInternalTable(內(nèi)部表)的總行數(shù)
SY-SROWS屏幕總行數(shù)
SY-SCOLS屏幕總列數(shù)
SY-VLINE畫豎線
SY-ULINE畫橫線
SY-PAGNO當前頁號
SY-LINSZ當前報表寬度
SY-LINCT當前報表長度
SY-LISND列表索引頁
SY-LISTI上一個列表的索引
SY-LILLI絕對列表中選定的行號
SY-CUROW屏幕上的行
光標列
真實行號
選擇行的內(nèi)容,長度為255
當前行
1.3確定數(shù)據(jù)對象的屬性
如果要查明數(shù)據(jù)對象的數(shù)據(jù)類型,或者要在程序的運行期間使用其屬性,可使用
DESCRIBE語句。語法如下:
DESCRIBEFIELD<f>[LENGTH<1>][TYPE<t>[COMPONENTS<n>]]
[OUTPUT-LENGTH<o>][DECIMALS<d>]
[EDITMASK<m>].
將由語句的參數(shù)指定的數(shù)據(jù)對象〈f>的屬性寫入?yún)?shù)后的變量。
DESCRIBEFIELDS語句具有下列參數(shù):
參數(shù)用途
LENGTH確定字段長度
TYPE確定數(shù)據(jù)類型
OUTPUT-LENGTH確定輸出長度
DECIMALS確定小數(shù)位
EDITMASK確定轉(zhuǎn)換例程
1.3.1確定字段長度
要確定數(shù)據(jù)對象的長度,利用DESCRIBEFIELD語句使用LENGTH參數(shù),如下所示:
DESCRIBEFIELD<f>LENGTH<1>.
系統(tǒng)讀取字段<f>的長度,并將值寫入字段〈1>。
1.3.2確定數(shù)據(jù)類型
要確定字段的數(shù)據(jù)類型,利用DESCRIBEFIELD語句使用TYPE參數(shù),如下所示:
DESCRIBEFIELD<f>TYPE<t>[COMPONENTS<n>L
系統(tǒng)讀取字段<f>的數(shù)據(jù)類型,然后將值寫入字段〈t>。
除返回預(yù)定義數(shù)據(jù)類型C、D、F、I、N、P、T和X外,該語句還返回
2s對于帶前導符號的兩字節(jié)整型
2b對于無前導符號的一字節(jié)整型
2h對于內(nèi)表
2C對于組件中沒有嵌套結(jié)構(gòu)的結(jié)構(gòu)
2C對于組件中至少有一個嵌套結(jié)構(gòu)的結(jié)構(gòu)
1.3.3確定輸出長度
要確定字段的輸出長度,利用DESCRIBEFIELD語句使用OUTPUT-LENGTH參數(shù),如下
所示:
DESCRIBEFIELD<f>OUTPUT-LENGTH<o>.
系統(tǒng)讀取字段<f>的輸出長度,并將值寫入字段〈。>。
1.3.4確定小數(shù)位
若要確定類型P字段的小數(shù)位的個數(shù),利用DESCRIBEFIELD語句使用DECIMALS參數(shù),
如下所示:
DESCRIBEFIELD<f>DECIMALS<d>.
系統(tǒng)讀取字段<f>的小數(shù)個數(shù),并將值寫入字段〈d〉。
1.3.5確定轉(zhuǎn)換例程
要確定ABAP/4詞典中某字段的轉(zhuǎn)換例程是否存在,如果存在,名稱是什么,利用
DESCRIBEFIELD語句使用EDITMASK參數(shù),如下所示:
DESCRIBEFIELD<f>EDITMASK<m>.
如果ABAP/4詞典中字段<f>的轉(zhuǎn)換例程存在,則系統(tǒng)將其寫入字段〈m〉,然后將系統(tǒng)字
段SY-SUBRC中的返回代碼設(shè)為0。
可以像下面所顯示的那樣,在WRITE語句中將字段<m>直接用作格式模板:
WRITE<f>USINGEDITMASK<m>.
如果字段〈f>沒有轉(zhuǎn)換例程,則系統(tǒng)將返回代碼設(shè)為4。
二數(shù)據(jù)輸出到屏幕
2.1在屏幕上定位Write輸出
通過制定字段名稱前面的格式規(guī)范,可以在屏幕上定位WRITE語句的輸出:
WRITEAT[/][<pos>][?len?]<f>.
此處
3斜線'/'表示新的一行
3〈pos>是最長為三位數(shù)字的數(shù)字或變量,表示在屏幕上的位置
3<len>是最長為三位數(shù)字的數(shù)字或變量,表示輸出長度
如果格式規(guī)范只包含直接值(即,不是變量),可以忽略關(guān)鍵字AT。
2.2格式化選項
對WRITE語句,可以使用不同的格式化選項。
WRITE<f>〈選項〉.
(1)所有數(shù)據(jù)類型的格式化選項:
選項用途
LEFT-JUSTIFIED輸出左對齊
CENTERED輸出居中
RIGHT-JUSTIFIED輸出右對齊
UNDER<g>輸出直接開始于字段〈g〉下
NO-GAP忽略字段<f〉后的空格
USINGEDITMASK<m>指定格式模板〈m>
USINGNOEDITMASK撤消對ABAP/4詞典中指定的格式模板的激活。
NO-ZERO如果字段僅包含零,則用空格代替它們
對類型C和N字段,將自動代替前導零
(2)數(shù)字字段的格式化選項:
選項用途
NO-SIGN不輸出前導符號
DECIMALS<d>〈d〉定義小數(shù)點后的數(shù)字位數(shù)。
EXPONENT<e>在類型F字段中,在〈e〉中定義累數(shù)
ROUND<r>用10**(-r)乘類型P字段,然后取整
CURRENCY<c>按表格TCURX中的貨幣<c>格式化。
UNIT<u>按表格T006中為類型P字段所指定的單位<u>固定小數(shù)位
數(shù)
(3)日期字段的格式化選項:
選項用途
DD/MM/YY用戶主記錄中定義的分隔符
MM/DD/YY用戶主記錄中定義的分隔符
DD/MM/YYYY用戶主記錄中定義的分隔符
MM/DD/YYYY用戶主記錄中定義的分隔符
DDMMYY無分隔符
MMDDYY無分隔符
YYMMDD無分隔符
2.3輸出符號和圖標
使用下列語法,可以在屏幕上輸出符號和R/3圖標:
WRITE<symbol-name>ASSYMBOL.
WRITE<icon-name>ASICON.
符號和圖標的名稱(〈符號名〉和〈圖標名〉)是定義系統(tǒng)的常量,這些常量在包含程序
〈SYMBOL〉和〈ICON〉(尖括號是名稱的一部分)中指定。這些包含程序也包含符號和圖標的簡
短說明。輸出符號和圖標最簡單的方法是使用語句結(jié)構(gòu)。
要使符號和圖標對程序可用,必須在程序中輸入恰當?shù)陌绦蚧蚋桌斫獾陌绦?/p>
<LIST>o
2.4輸出線和空行
(1)水平線
用下列語法,可以在輸出屏幕上生成水平線:
ULINE[AT[/][<pos>][?len?]].
它等同于
WRITE[AT[/][<pos>][?len?]]SY-ULINE.
AT后的格式規(guī)范,與在屏幕上定位WRITE輸出中為WRITE語句說明的格式規(guī)范完全
一樣。如果沒有格式規(guī)范,系統(tǒng)則開始新的一行,并用水平線填充該行。否則,只按指定輸
出水平線。
生成水平線的另一種方法,是在WRITE語句中鍵入恰當數(shù)量的連字符,如下所示:
WRITE[AT[/][<pos>][?len?]]'
(2)垂直線
用下列語法,可以在輸出屏幕上生成垂直線:
WRITE[AT[/][<pos>]]SY-VLINE.
或
WRITE[AT[/][<pos>]]"I'.
(3)空行
用下列語法,可以在輸出屏幕上生成空行:
SKIP[<n>L
該語句從當前行開始,在輸出屏幕上生成<n>個空行。如果沒有指定〈n〉的值,就輸出一
個空行。
(4)要將輸出定位在屏幕的指定行上,使用:
SKIPTOLINE<n>.
該語句允許將輸出位置向上或向下移動。
2.5將字段內(nèi)容作為復(fù)選框輸出
使用下列語法,可以將字段的第一個字符,作為復(fù)選框輸出到輸出屏幕上:
WRITE<f>ASCHECKBOX.
如果字段<f>的第一個字符是一個“X”,就顯示復(fù)選框已填充。如果字段〈f>的第一個
字符是SPACE,就顯示復(fù)選框為空。
該語句創(chuàng)建的復(fù)選框,默認狀態(tài)是可輸入的。就是說,用戶可以通過單擊鼠標來填充它
們或使其為空。
三賦值
在ABAP/4中,可以在聲明語句和操作語句中給數(shù)據(jù)對象賦值。在聲明語句中,將初始
值賦給聲明的數(shù)據(jù)對象。為此,可以在DATA、常量或STATICS語句中使用VALUE參數(shù)。
要在操作語句中給數(shù)據(jù)對象賦值,可以使用:
6MOVE語句和WRITETO語句,對應(yīng)于賦值運算符(=)
3.1用MOVE賦值
3.1.1基本賦值操作
要將值(文字)或源字段的內(nèi)容賦給目標字段,可以使用MOVE語句或賦值運算符(=)。
MOVE語句的語法如下所示:
MOVE<fl>TO<f2>.
MOVE語句將源字段〈fl>的內(nèi)容傳送給目標字段<f2>。<fl>可以是任何數(shù)據(jù)對象。<f2>
必須是變量,不能是文字或常量。傳送后,〈fl〉的內(nèi)容保持不變。
賦值運算符(=)的語法如下所示:
<f2>=<fl>.
MOVE語句和賦值運算符功能相同。
3.1.2用指定偏移量賦值
可以在每條ABAP/4語句中為基本數(shù)據(jù)類型指定偏移量和長度。在這種情況下,MOVE
語句語法如下:
MOVE<fl>[+<ol>][?ll?]TO<f2>[+<o2>][?12?].
將字段〈fl>從位置開始且長度為〈11〉的段內(nèi)容賦給字段〈f2〉,覆蓋從〈o2>+l位
置開始且長度為〈12〉的段。
在MOVE語句中,所有偏移量和長度指定都可為變量。
3.1.3在字符串組件之間賦值
描述的MOVE語句賦值方法適用于基本數(shù)據(jù)對象和結(jié)構(gòu)化數(shù)據(jù)對象。另外,還有一種
MOVE語句變體,允許將源字段串組件內(nèi)容復(fù)制到目標字段串組件中。語法如下:
MOVE-CORRESPONDING<stringl>TO<string2>.
該語句將字段串〈stringl》組件的內(nèi)容賦給有相同名稱的字段串〈string2>組件。
對于每對名稱,系統(tǒng)都執(zhí)行MOVE語句,如下所示:
MOVESTRINGl-<component>TOSTRING2-<component>.
系統(tǒng)分別執(zhí)行所有必要類型轉(zhuǎn)換O該處理不同于包括整個字段串的賦值。在這種情況下,
應(yīng)用不兼容的字段串和基本字段所述的轉(zhuǎn)換規(guī)則=
3.2用WRITETO賦值
要將值(文字)或源字段內(nèi)容寫入目標字段,可以使用WRITETO語句:
WRITE<fl>TO<f2>[<option>].
WRITETO語句將源字段〈fl〉內(nèi)容寫入目標字段<f2>。〈fl>可以是任何數(shù)據(jù)對象,〈f2>
必須是變量,不能是文字或常量。寫入后,〈fl〉內(nèi)容保持不變。
對于〈option>,可以使用WRITE語句的所有格式化選項(UNDER和N0-GAP除外)。
WRITETO語句總是檢查用戶主記錄中的設(shè)置。例如,這些設(shè)置指定是將小數(shù)點顯示為
句號(.),還是逗號(,)。
WRITETO語句并不遵循類型轉(zhuǎn)換中所述的轉(zhuǎn)換規(guī)則。目標字段解釋為類型C字段。系
統(tǒng)總是將源字段內(nèi)容轉(zhuǎn)換為類型C,它不將結(jié)果字符串轉(zhuǎn)換為目標字段的數(shù)據(jù)類型,而直接
寫入目標字段。因此,不應(yīng)使用數(shù)值數(shù)據(jù)類型的目標字段。
3.2.1運行時指定源字段
可以使用WRITETO語句在運行時指定源段。為此,需用括號將包含源字段名的數(shù)據(jù)對
象名括起來,并將其放在源字段位置:
WRITE?f?TO<g>.
系統(tǒng)將賦給<f〉的數(shù)據(jù)對象值放到〈g>中。
然而,如果要在運行時指定目標字段,則必須按使用字段符號中所述,使用字段符號。
3.2.2用指定偏移量寫入值
可以指定每條ABAP/4語句中基本數(shù)據(jù)對象的偏移量和長度。WRITETO語句語法如下:
WRITE<fl>[+<ol>][?ll?]TO<f2>[+<o2>][?12?].
將字段〈fl>中從<。1>+1位置開始且長度為<11>的內(nèi)容賦給字段〈f2〉,覆蓋從<。2>+1位
置開始且長度為〈12〉的段。
在WRITETO語句中,目標字段的偏移量和長度指定可為變量。
四數(shù)值運算
要處理數(shù)值數(shù)據(jù)對象并將結(jié)果值賦給數(shù)據(jù)對象,可以用COMPUTE語句或賦值運算符
(=)。COMPUTE語句語法如下所示:
COMPUTE<n>=<expression>.
關(guān)鍵字COMPUTE可選。
4.1基本算術(shù)運算
ABAP/4支持四種基本算術(shù)運算,同時還支持乘方計算。可以用數(shù)學表達式指定以下算
術(shù)運算符:
+加法
-減法
*乘法
/除法
DIV整除
MOD求余
**求幕
可以用關(guān)鍵字ADD、SUBTRACT>MULTIPLY和DIVIDE進行基本算術(shù)運算,而不使用數(shù)
學表達式中的運算符。
4.2字符串的算術(shù)運算
類似于用MOVE-CORRESPONDING語句在字段串之間復(fù)制值,可以用以下關(guān)鍵字,執(zhí)行字
段串的算術(shù)運算:
8ADD-CORRESPONDING
8SUBTRACT-CORRESPONDING
8MULTIPLY-CORRESPONDING
8DIVIDE-CORRESPONDING
對于所有同名字段串組件,ABAP/4進行相應(yīng)算術(shù)運算。然而,僅當所有相關(guān)組件都是
數(shù)值型數(shù)據(jù)類型時,該運算才有意義。
4.2.1添加字段順序
除基本算術(shù)運算中所述的基本加法之外,ADD語句有幾個變體,用于添加字段順序。例
如,添加字段順序并將結(jié)果賦給另一個字段:
ADD<nl>THEN<n2>UNTIL<nz>GIVING<m>.
如果〈nl〉、<n2><nz>是在內(nèi)存中相同類型和長度的等距字段序列,則進行求
和計算并將結(jié)果賦給〈m〉
添加字段順序并將結(jié)果添加到另一個字段內(nèi)容中:
ADD<nl>THEN<n2>UNTIL<nz>TO<m>.
該語句除了將字段總和添加到〈m〉的舊內(nèi)容中之外,與上面語句的工作方式相同。
4.3數(shù)學函數(shù)
以下內(nèi)部函數(shù)使用所有三種數(shù)值數(shù)據(jù)類型(F、I和P)作為參數(shù)。
函數(shù)結(jié)果
ABS參數(shù)的絕對值
SIGN參數(shù)符號:1X>0
SIGN(X)=0ifX=0
-1X<0
CEIL不小于參數(shù)的最小整數(shù)值
FLOOR不大于參數(shù)的最大整數(shù)值
TRUNC參數(shù)的整數(shù)部分
FRAC參數(shù)的分數(shù)部分
4.4浮點函數(shù)
以下內(nèi)部函數(shù)用浮點數(shù)據(jù)類型(F)作為參數(shù)。
函數(shù)解釋
ACOS、ASIN、ATAN;三角函數(shù)
COS、SIN、TAN
COSH、SINH、TANK反三角函數(shù)
EXP基數(shù)為e的求募函數(shù)(e=2.7182818285)
LOG基數(shù)為e的自然對數(shù)
LOG1O基數(shù)為10的對數(shù)
SQRT平方根
對于所有函數(shù),正常數(shù)學約束適用。否則,會產(chǎn)生運行錯誤。
五字符串
5.1移動字符串
5.1.1按給定位置數(shù)移動字符串
要按給定位置數(shù)移動字段內(nèi)容,使用SHIFT語句,用法如下:
SHIFT<c>[BY<n>PLACES][<mode>],
該語句將字段<c>移動<n>個位置。如果省略BY<n>PLACES,則將〈n>解釋為一個位置。
如果〈n>是0或負值,貝lj〈c>保持不變。如果<n>超過<c>長度,貝he〉用空格填充。<n>可為
變量。
對不同(<mode>)選項,可以按以下方式移動字段〈c>:
LEFT:向左移動〈n>位置,右邊用<n>個空格填充(默認設(shè)置)。
RIGHT:向右移動〈n〉位置,左邊用〈n>個空格填充。
CIRCULAR:向左移動〈n>位置,以便左邊〈n〉個字符出現(xiàn)在右邊。
5.1.2移動字符串到給定串位置
要移動字段內(nèi)容以到給定串位置,則使用SHIFT語句,用法如下:
SHIFT<c>UPTO<str><mode>.
ABAP/4查找〈c>字段內(nèi)容直到找到字符串<str>并將字段<c>移動到字段邊緣。<mode>
選項與按給定位置數(shù)移動字符串中所述相同。<str>可為變量。
如果〈c>中找不到〈str>,則將SY-SUBRC設(shè)置為4并且不移動<c>。否則,將SY-SUBRC
設(shè)置為0。
5.1.3根據(jù)第一個或最后一個字符移動字符串
假設(shè)第一個或最后一個字符符合一定條件,則可用SHIFT語句將字段向左或向右移動。
為此,請使用以下語法:
SHIFT<c>LEFTDELETINGLEADING<str>.
SHIFT<c>RIGHTDELETINGTRAILING<str>.
假設(shè)左邊的第一個字符或右邊的最后一個字符出現(xiàn)在〈str〉中,該語句將字段<c>向左或
向右移動。字段右邊或左邊用空格填充,〈str>可為變量。
5.2替換字段內(nèi)容
要用其它字符串替換字段串的某些部分,使用REPLACE語句。
REPLACE<strl>WITH<str2>INTO<c>[LENGTH<1>L
ABAP/4搜索字段〈c>中模式〈strl>前<1>個位置第一次出現(xiàn)的地方。如果未指定長度,
按全長度搜索模式〈strl〉。然后,語句將模式〈strl〉在字段<c>中第一次出現(xiàn)的位置用字符
串〈str2>替換。
如果指定長度〈1>,則只替換模式的相關(guān)部分。如果將系統(tǒng)字段SY-SUBRC的返回代碼
設(shè)置為0,則說明在〈c>中找到〈strl>且已用〈str2>替換。非0的返回代碼值意味著未替換。
<strl>>〈str2>和〈len〉可為變量。
5.3大小寫轉(zhuǎn)換并替換字符串
可以將字母轉(zhuǎn)換大/小寫或使用替換規(guī)則。要轉(zhuǎn)換大/小寫,使用TRANSLATE語句,用
法如下:
TRANSLATE<c>TOUPPERCASE.
TRANSLATE<c>TOLOWERCASE.
這些語句將字段〈c>中的所有小寫字母轉(zhuǎn)換成大寫或反之。
使用替換規(guī)則時,使用以下語法:
TRANSLATE<c>USING<r>.
該語句根據(jù)字段<r〉中存儲的替換規(guī)則替換字段<c>的所有字符。<r>包含成對字母,其
中每對的第一個字母用第二個字母替換。<r>可為變量。
5.4轉(zhuǎn)換為可排序格式
可以將字符字段轉(zhuǎn)換為可按字母順序排列的格式:
CONVERTTEXT<c>INTOSORTABLECODE<sc>.
該語句為字符字段〈C>填充可排序目標字段<SC〉。字段<C>必須是類型C且字段〈SC〉必
須是類型X,最小長度為<c>長度的16倍。
該語句目的是為字符字段<c>創(chuàng)建相關(guān)字段〈sc>,作為〈c〉的按字母順序排列的排序關(guān)鍵
字。在內(nèi)表的內(nèi)容和已解壓縮的數(shù)據(jù)中進行排序。
如果對未轉(zhuǎn)換的字符字段進行排序,則系統(tǒng)創(chuàng)建與各字母的特定平臺內(nèi)部編碼相對應(yīng)的
順序。在對目標字段進行排序之后,轉(zhuǎn)換CONVERTTEXT按這樣的方式創(chuàng)建目標字段,相應(yīng)
的字符字段順序按字母排序。例如,在德語中,順序為'Miller、Moller、Miler、Muller',
而不是'Miller>Moller、Muller、Miler'。
轉(zhuǎn)換方法依賴于運行ABAP/4程序的文本環(huán)境。文本環(huán)境在用戶主記錄中定義。例外的
是可以使用如下語句,在程序中設(shè)置文本環(huán)境:
SETLOCALELANGUAGE<lg>[COUNTRY<cy>][MODIFIER<m>L
該語句根據(jù)語言<lg>設(shè)置文本環(huán)境。對于選項COUNTRY,只要特定國家語言不同,就可
以在語言以外指定國家。對于選項MODIFIER,只要一個國家內(nèi)語言不同,就可以指定另一
個標識符,例如,排序順序在電話簿和詞典之間不同。
字段〈lg>、〈cy〉和〈m〉必須是類型C且長度必須與表TCPOC的關(guān)鍵字段長度相等。表
TCPOC是一個表格,從中進行平臺相關(guān)的文本環(huán)境維護。在語句SETLOCALE期間,系統(tǒng)根
據(jù)TCPOC中的條目設(shè)置文本環(huán)境。除了內(nèi)部傳送的平臺特性之外,用SET語句指定表關(guān)鍵
字。如果Qg>等于SPACE,則系統(tǒng)根據(jù)用戶主記錄設(shè)置文本環(huán)境。如果對于指定的關(guān)鍵字
在表中無條目,則系統(tǒng)將產(chǎn)生運行錯誤。
文本環(huán)境影響ABAP/4中依賴于字符集的所有操作。
5.5覆蓋字符字段
要用另一字符字段覆蓋字符字段,使用OVERLAY語句,用法如下:
OVERLAY<cl>W(wǎng)ITH<c2>[ONLY<str>].
該語句用<c2>的內(nèi)容覆蓋字段〈cl〉中包含<str>中字母的所有位置。<c2>保持不變。如
果省略O(shè)NLY<str>,則覆蓋字段<cl>中所有包含空格的位置。
如果至少要替換〈cl>中的一個字符,則將SY-SUBRC設(shè)置為Oo對于所有其它情況,將
SY-SUBRC設(shè)置為4o如果<cl>比<c2>長,則只覆蓋〈c2〉中的長度。
5.6搜索字符串
要搜索特定模式的字符串,請使用SEARCH語句,用法如下:
SEARCH<c>FOR<str><options>.
該語句在字段〈c>中搜索〈str>中的字符串。如果成功,則將SY-SUBRC的返回代碼值設(shè)
置為。并將SY-FDPOS設(shè)置為字段<c〉中該字符串的偏移量。否則將SY-SUBRC設(shè)置為4。
搜索串〈str〉可為下列格式之一:
<str>目的
<pattern>搜索〈pattern》(任何字符順序)。忽略尾部空格
.<pattern>.搜索〈pattern>,但是不忽略尾部空格
*<pattern>搜索以〈pattern)結(jié)尾的詞
〈pattern〉*搜索以〈pattern)開始的詞
單詞之間用空格、逗號、句號、分號、冒號、問號、嘆號、括號、斜杠、加號和等號等
分隔。
搜索字符字段<c〉的各種選項(〈options〉)如下
(1)ABBREVIATED
在字段<c>中搜索包含〈str>中指定字符串的單詞,其中字符可能被其它字符隔開。單詞
和字符串的第一個字母必須相同。
(2)STARTINGAT<nl>
在字段<c>中搜索從〈nl〉開始的〈str>。結(jié)果SY-FDPOS參照相對于〈nl〉的偏移量而不是
字段的開始。
(3)ENDINGAT<n2>
在字段<c>搜索<str>直到位置〈n2>。
(4)ANDMARK
如果找到搜索串,則將搜索串中的所有字符(和使用ABBREVIATED時的所有字符)轉(zhuǎn)
換為大寫形式。
5.7獲得字符串長度
要決定字符串到最后一個字符而不是SPACE的長度,使用內(nèi)部函數(shù)STRLEN,用法如下:
[COMPUTE]<n>=STRLEN?c>).
STRLEN將操作數(shù)〈c>作為字符數(shù)據(jù)類型處理,而不考慮其實際類型。不進行轉(zhuǎn)換。關(guān)鍵
字COMPUTE可選。
5.8壓縮字符串去空格
要刪除字符字段中多余空格,使用CONDENSE語句,用法如下:
CONDENSE<c>[NO-GAPS].
該語句去除字段<c>中的前導空格并用一個空格替換其它空格序列。結(jié)果是左對齊單詞,
每個單詞用空格隔開。如果指定附加的NO-GAPS,則去除所有空格。
5.9連接字符串
要將單個字符串連接成一體,使用CONCATENATE語句,用法如下:
CONCATENATE<cl>...<cn>INTO<c>[SEPARATEDBY<s>].
該語句連接字符串<cl>與〈cn>并將結(jié)果賦給<c>。
該操作忽略尾部空格。附加SEPARATEDBY<s〉允許指定字符字段〈s>,它放置在單個字
段間已定義的長度中。
如果結(jié)果符合〈c》,則將SY-SUBRC設(shè)置為0。然而,如果結(jié)果必須被截斷,則將
SY-SUBRC設(shè)置為4?
5.10拆分字符串
要將字符串拆分成兩個或更多小串,使用SPLIT語句,用法如下:
SPLIT<c>AT<del>INTO<cl>...<cn>.
該語句在字符字段〈c〉搜索分界字符串<del>,并將分界符之前和之后的部分放到目標字
段〈cl>...<cn>中。
要將所有部分放到不同目標字段中,必須指定足夠目標字段。否則,用字段<c>的剩余
部分填充最后目標字段并包含分界符。
如果所有目標字段足夠長且不必截斷任何部分,則將SY-SUBRC設(shè)置為0。否則,將其
設(shè)置為4。
5.11分配字符串部分
MOVE語句的以下變體只使用類型C字段:
MOVE<cl>TO<c2>PERCENTAGE<p>[RIGHT].
將左對齊的字符字段〈cl〉的百分比<p>(或如果用RIGHT選項指定,則為右對齊)復(fù)制
到〈c2>。
〈P〉值可為0和100之間的任何數(shù)。將要從〈fl〉復(fù)制的長度取整為下一個整數(shù)。
如果語句中某一參數(shù)不是類型C,則忽略參數(shù)PERCENTAGEo
六邏輯流控制
6.1比較運算符
要比較所有的字段類型,可以在邏輯表達式中使用下列運算符:
〈運算符》含義
EQ等于
=等于
NE不等于
<>不等于
X不等于
LT小于
<小于
LE小于等于
<=小于等于
GT大于
>大于
GE大于等于
>=大于等于
操作數(shù)可以是數(shù)據(jù)庫字段、內(nèi)部字段、文字或常數(shù)。
除基本字段外,還可以將結(jié)構(gòu)數(shù)據(jù)類型和上表中的運算符結(jié)合起來作為操作數(shù)。字段串
逐個組件進行比較,嵌套的結(jié)構(gòu)分為基本的字段。
如果有意義,可以對不同數(shù)據(jù)類型的字段進行比較o如果字段可轉(zhuǎn)換,就可以進行比較。
在比較之前,系統(tǒng)將按照下列層次規(guī)則執(zhí)行自動類型轉(zhuǎn)換:
(1)如果操作數(shù)之一是浮點數(shù)(類型F),則系統(tǒng)將其它操作數(shù)轉(zhuǎn)換為類型F。
(2)如果操作數(shù)之一是壓縮字段(類型P),則系統(tǒng)將其它操作數(shù)轉(zhuǎn)換為類型P。
(3)如果操作數(shù)之一是日期字段(類型D)或時間字段(類型T),則系統(tǒng)將其它操作
數(shù)轉(zhuǎn)換為類型D或T。不支持日期和時間字段之間的比較,這會導致程序中斷。
(4)如果操作數(shù)之一是字符字段(類型C)且其它操作數(shù)是十六進制字段(類型X),
則系統(tǒng)將類型X的操作數(shù)轉(zhuǎn)換為類型Co
(5)如果操作數(shù)之一是字符字段(類型C),其它操作數(shù)為數(shù)字字段(類型N),則系
統(tǒng)將這兩種操作數(shù)都轉(zhuǎn)換為類型Po
6.2比較字符串和數(shù)字串
要比較字符串(類型C)和數(shù)字文本(類型N),可以在邏輯表達式中使用下列運算符。
〈運算符》含義
co僅包含
CN不僅包含
CA包含任何
NA不包含任何
CS包含字符串
NS不包含字符串
CP包含模式
NP不包含模式
因為除類型N和C外,系統(tǒng)不能執(zhí)行任何其它類型轉(zhuǎn)換,所以,在進行包含這些運算
之一的比較時,操作數(shù)應(yīng)該是類型N或C。
運算符的功能如下:
(1)CO(僅包含)
如果<fl〉僅包含<f2>中的字符,則邏輯表達式<fl>CO<f2>為真。該比較區(qū)分大小寫,
并包括尾部空格。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包括〈fl>的長度。如果為假,
則SY-FDPOS包含〈fl〉中第一個未在<f2>內(nèi)出現(xiàn)的字符的偏移量。
(2)CN(不僅包含)
如果〈fl>還包含〈f2〉之外的其他字符,則邏輯表達式〈f1>CN〈f2〉為真。該比較區(qū)分大
小寫,并包括尾部空格。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含〈fl〉中第一個未同
時在〈f2〉中出現(xiàn)的字符的偏移量。如果為假,SY-FDPOS包含<fl〉的長度。
(3)CA(包含任何)
如果〈fl>至少包含〈f2〉的一個字符,則邏輯表達式〈fl>CA〈f2>為真。該比較區(qū)分大小
寫。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含〈fl〉中第一個也在〈f2〉中出現(xiàn)的字符的
偏移量。如果為假,SY-FDPOS包含〈fl>的長度。
(4)NA(不包含任何)
如果〈fl>不包含<f2>的任何字符,則邏輯表達式<fl〉NA〈f2>為真。該比較區(qū)分大小寫。
如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含<fl〉的長度。如果為假,則SY-FDPOS包含
〈f1〉中在〈f2>內(nèi)出現(xiàn)的第一個字符的偏移量。
(5)CS(包含字符串)
如果〈fl>包含字符串<f2>,則邏輯表達式〈fDCS<f2〉為真。忽略尾部空格并且比較不
區(qū)分大小寫。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含<f2>在〈fl〉中的偏移量。如果
為假,SY-FDPOS包含<fl〉的長度。
(6)NS(不包含字符串)
如果〈fl>不包含字符串〈f2〉,則邏輯表達式〈fl>NS<f2>為真。忽略尾部空格且比較不
區(qū)分大小寫。如果比較為真,系統(tǒng)字段SY-FDPOS包含<fl〉的長度。如果為假,系統(tǒng)字段
SY-FDPOS包含<f2>在<fl〉中的偏移量。
(7)CP(包含模式)
如果<fl>包含模式<f2>,則邏輯表達式〈fl〉CP<f2>為真。如果〈f2>屬于類型C,則可
以在〈f2>中使用下列通配符:
15*用于任何字符串
15+用于任何單個字符
忽略尾部空格且比較不區(qū)分大小寫。如果比較結(jié)果為真,系統(tǒng)字段SY-FDPOS包含〈f2〉
在〈fl>中的偏移量。如果為假,SY-FDPOS包含<fl>的長度。
如果要對〈f2>中的特殊字符進行比較,請將換碼符#放到其前面??梢允褂脫Q碼字符#
指定:
16大小寫字符
16通配符"*"(輸入#*)
16通配符"+"(輸入#+)
16換碼符號本身(輸入##)
16字符串結(jié)尾的空格(輸入#—)
(8)NP(不包含模式)
如果〈fl>不包含模式〈f2〉,則邏輯表達式〈垣〉燈〈£2〉為真。在Cf2〉中,可以使用與CP
相同的通配符和換碼字符。忽略尾部空格且比較不區(qū)分大小寫。如果比較結(jié)果為真,則系統(tǒng)
字段SY-FDPOS包含<fl〉的長度,如果為假,SY-FDPOS包含<f2>在<fl〉中的偏移量。
6.3比較二進制位結(jié)構(gòu)
要將邏輯表達式初始操作數(shù)第一字節(jié)的二進制位結(jié)構(gòu)與第二操作數(shù)的進行比較,請使用
下列操作符。
〈運算符》含義
0二進制位是1
Z二進制位是0
M混合二進制位
第二操作數(shù)的長度應(yīng)為一個字節(jié)。
沒有必要對第二操作數(shù)使用長度為1的十六進制字段(類型X),但卻較方便,因為其
長度為一個字節(jié)且數(shù)字值直接與二進制位結(jié)構(gòu)相關(guān)。
操作符功能如下:
0(二進制位是1)
如果〈hex>中二進制位是1的位置,在<f>中是1,則邏輯表達式〈f>0〈hex〉為真。
Z(二進制位是0)
如果〈hex>中二進制位是1的位置,在<f>中是0,則邏輯表達式<f>Z〈hex〉為真。
M(混合二進制位)
如果從<hex>中二進制位是1的位置起,〈f〉中至少一個是1,一個是0,則邏輯表達
式〈f>M〈hex>為真。
6.4編程分支和循環(huán)
6.4.1IF條件分支
IF語句允許依據(jù)條件將程序流轉(zhuǎn)到特定的語句塊中。該語句塊包括IF語句及其后面
的ELSEIF、ELSE或ENDIF之間的所有命令。
IF<conditionl>.
<statementblock>
ELSEIF<condition2>.
<statementblock>
ELSEIF<condition3>.
<statementblock>
ELSE.
<statementblock>
ENDIF.
如果第一個條件是真,系統(tǒng)將執(zhí)行所有語句直到第一個語句塊結(jié)束,然后繼續(xù)處理
ENDIF語句之后的程序。要采用選擇性條件,可以使用ELSEIF語句。如果第一個條件是假,
系統(tǒng)使用與IF語句一樣的方式處理后面的ELSEIF語句。如果IF或ELSEIF條件都為假,
則執(zhí)行ELSE開始的語句塊。最后的語句塊必須用ENDIF結(jié)束。
要用公式表達IF和ELSEIF語句中的條件,可以使用任何編程邏輯表達式描述的邏輯
表達式。
6.4.2CASE條件分支
要根據(jù)特殊數(shù)據(jù)字段的內(nèi)容執(zhí)行不同的語句塊,可以如下使用CASE語句:
CASE<f>.
WHEN<fl>.
<statementblock>
WHEN<f2>.
<statementblock>
WHEN<f3>.
<statementblock>
WHEN...
WHENOTHERS.
<statementblock>
ENDCASE.
系統(tǒng)執(zhí)行WHEN語句之后的語句塊,如果<f>內(nèi)容等于<fi>的內(nèi)容,且繼續(xù)處理ENDCASE
語句后面的語句。如果〈f〉的內(nèi)容不等于<fi〉的內(nèi)容,則執(zhí)行選項WHENOTHERS后面的語句
塊。最后的語句塊必須用ENDCASE結(jié)束。
6.4.3D0無條件循環(huán)
如果想要多次執(zhí)行語句塊,則可以如下使用DO語句編程循環(huán):
DO[<n>TIMES][VARYING<f>FROM<fl>NEXT<f2>L
<statementblock>
ENDDO.
在發(fā)現(xiàn)EXIT、STOP或REJECT語句之前,系統(tǒng)繼續(xù)執(zhí)行由DO引導、ENDDO結(jié)束的
語句塊。
可以使用TIMES選項限制循環(huán)次數(shù)。<n>可以是文字或變量。如果〈n>是0或負數(shù),系
統(tǒng)不執(zhí)行該循環(huán)。
系統(tǒng)字段SY-INDEX中包含已處理過的循環(huán)次數(shù)。
6.4.4WHILE條件循環(huán)
如果只要條件為真,就不止一次執(zhí)行語句,可以如下使用WHILE語句編程:
WHILE<condition>[VARY<f>FROM<fl>NEXT<f2>].
<statementblock>
ENDWHILE.
只要〈condition》是真,或系統(tǒng)發(fā)現(xiàn)EXIT、STOP或REJECT語句,系統(tǒng)將繼續(xù)執(zhí)行由
WHILE語句引導、ENDWHILE結(jié)束的語句塊。
對于〈condition>,可以使用編程邏輯表達式中描述的任何邏輯表達式。
系統(tǒng)字段SY-INDEX中包含已執(zhí)行的循環(huán)次數(shù)。
可以任意嵌套WHILE循環(huán),也可與其他循環(huán)結(jié)合使用。
WHILE語句的VARY選項與DO循環(huán)的VARYING選項工作方式一樣。允許每次執(zhí)行循
環(huán)時為變量<f>重新賦值。〈fl>、<f2>、<f3>、...必需是內(nèi)存中類型相同和長度相等的一
系列等距字段。第一次循環(huán)時,將〈fl>分配給<f>,第二次循環(huán)時,將<f2>分配給<f>,以此
類推??梢栽谝粋€WHILE語句中使用多個VARY選項。
6.5終止循環(huán)
要終止循環(huán)過程,請使用下列關(guān)鍵字之一。
關(guān)鍵字用途
CONTINUE無條件終止循環(huán)過程
CHECK有條件終止循環(huán)過程
EXIT完全終止循環(huán)
在循環(huán)中只能使用CONTINUE,但在循環(huán)外還可使用關(guān)鍵字CHECK和EXIT,分別完成
不同的功能。
6.5.1無條件終止
要立即無條件終止循環(huán),請如下使用CONTINUE語句:
CONTINUE.
在CONTINUE語句之后,系統(tǒng)跳過當前語句塊中所有剩余語句塊,繼續(xù)該語句后面的循
環(huán)。
6.5.2有條件終止
要有條件終止循環(huán)過程,請如下使用CHECK語句:
CHECK<condition>.
如果條件是假,系統(tǒng)跳過當前語句塊中所有剩余語句塊,繼續(xù)后面的循環(huán)過程。對于
(condition〉,可使用編程邏輯表達式中描述的任何邏輯表達式。
6.5.3完全終止
要無條件完全終止循環(huán),請如下使用EXIT語句:
EXIT.
EXIT語句之后,系統(tǒng)立即退出循環(huán),繼續(xù)結(jié)束語句(ENDDO、ENDWHILE>ENDSELECT)
后面的處理。在嵌套循環(huán)中,系統(tǒng)僅退出當前循環(huán)。
七內(nèi)表
7.1創(chuàng)建內(nèi)表
TYPES:BEGINOF<f>OCCURS<n>,
<componentdeclaration>,
ENDOF<f>.
DATA:<itab>TYPESTANDARDOF<f>,
<wa>TYPE<f>.
其作用與先創(chuàng)建字段串〈f>,然后再創(chuàng)建與該字段串行結(jié)構(gòu)相同的內(nèi)表〈f>相同?!磏〉指
定行的初始號。將第一行寫入用類型〈t>創(chuàng)建的內(nèi)表數(shù)據(jù)對象之后,就為指定行保留內(nèi)存。
如果添加到內(nèi)表中的行比<n〉指定的要多,則自動擴展保留的內(nèi)存。如果內(nèi)存中沒有足夠空
間可用于內(nèi)表,則將其寫入緩沖區(qū)或磁盤(分頁區(qū)域)。
7.2填充內(nèi)表
要填充內(nèi)表,既可逐行添加數(shù)據(jù),也可復(fù)制另一個表格的內(nèi)容。要逐行填充內(nèi)表,可以
使用APPEND,COLLECT或INSERT語句。
要將內(nèi)表僅用于存儲數(shù)據(jù),出于性能方面的考慮,建議使用APPEND?用APPEND也可
以創(chuàng)建序列清單。
7.2.1無關(guān)鍵字附加行
要將行附加到內(nèi)表中,使用APPEND語句,用法如下:
APPEND[<wa>TO|INITIALLINETO]<itab>.
該語句將新行附加到內(nèi)表〈itab〉中。
通過使用<wa>T0選項,指定要附加的源區(qū)域〈wa>。對于帶表頭行的表格,可以忽略TO
選項。這樣,表格工作區(qū)域就成了源區(qū)域。
可以使用INITIALLINETO選項替代〈wa〉TO,將用其類型的正確值初始化的行添加到
表格中。
A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025車輛保管合同書范文
- 2025保修工程合同范本
- 2025學校食堂承包合同書
- 2025關(guān)于試用期解除合同及案例
- 2025年度軍事電子對抗保密技術(shù)合同3篇
- 2025年度新能源充電設(shè)施建設(shè)公司合作協(xié)議書3篇
- 二零二五年度農(nóng)村房屋租賃合同(含農(nóng)業(yè)產(chǎn)業(yè)升級)
- 二零二五年度體育場館租賃合同及賽事運營協(xié)議3篇
- 2025年度農(nóng)村個人地基使用權(quán)轉(zhuǎn)讓及農(nóng)業(yè)現(xiàn)代化設(shè)施配套協(xié)議書3篇
- 2025年度教育信息化項目經(jīng)理合作協(xié)議2篇
- 專題07:回憶性散文閱讀(考點串講)
- 公司IT運維管理制度
- 護理帶教課件教學課件
- 促進低空經(jīng)濟農(nóng)林生產(chǎn)應(yīng)用場景實施方案
- 重慶市市轄區(qū)(2024年-2025年小學四年級語文)人教版期末考試(上學期)試卷及答案
- 廣東省一年級數(shù)學上學期期末考試試卷部編版-(附解析)
- 2024年公安基礎(chǔ)知識考試題庫及答案
- 2024年北京通州區(qū)初三九年級上學期期末數(shù)學試題和答案
- 新蘇教版3三年級數(shù)學上冊(表格式)教案【全冊】
- 北師大版三年級數(shù)學上冊寒假作業(yè)96
- DB11∕T 1735-2020 地鐵正線周邊建設(shè)敏感建筑物項目環(huán)境振動控制規(guī)范
評論
0/150
提交評論