取得一个字符串表达式的计算结果(实现方法一)
2010-12-23 14:36
711 查看
利用数据库来帮助我们计算.
REPORT zsolar.
DATA: lv_re TYPE string.
PERFORM frm_test USING '20*(2+3)' CHANGING lv_re.
WRITE:/ lv_re.
*&---------------------------------------------------------------------*
*& Form frm_test
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LV_IN text
* -->LV_OUT text
*----------------------------------------------------------------------*
FORM frm_test USING lv_in CHANGING lv_out.
DATA: code TYPE TABLE OF rssource-line,
prog(8) TYPE c, msg(120) TYPE c, lin(3) TYPE c,
wrd(10) TYPE c, off(3) TYPE c.
DATA: lv_temp TYPE string.
CONCATENATE 'SELECT' lv_in 'from mara into :lv_out' INTO lv_temp SEPARATED BY space.
APPEND 'PROGRAM SUBPOOL.' TO code.
APPEND 'FORM frm_string_count2 USING lv_in CHANGING lv_out.' TO code.
APPEND 'DATA: msg TYPE string,' TO code.
APPEND 'oref TYPE REF TO cx_sy_native_sql_error.' TO code.
APPEND 'TRY .' TO code.
APPEND 'EXEC SQL.' TO code.
* APPEND 'SELECT 12*34+56 from mara into :lv_out' TO code.
APPEND lv_temp TO code.
APPEND 'ENDEXEC.' TO code.
APPEND 'CATCH cx_sy_native_sql_error INTO oref.' TO code.
APPEND 'CALL METHOD oref->get_text' TO code.
APPEND 'RECEIVING' TO code.
APPEND 'result = msg.' TO code.
APPEND 'WRITE msg.' TO code.
APPEND 'ENDTRY.' TO code.
APPEND 'ENDFORM.' TO code.
GENERATE SUBROUTINE POOL code NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.
IF sy-subrc EQ 0.
PERFORM frm_string_count2 IN PROGRAM (prog) USING lv_in CHANGING lv_re IF FOUND.
ENDIF.
ENDFORM. "frm_test
*&---------------------------------------------------------------------*
*& Form frm_string_count
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*FORM frm_string_count2 USING lv_in CHANGING lv_out.
* DATA: msg TYPE string,
* oref TYPE REF TO cx_sy_native_sql_error.
* TRY .
* EXEC SQL.
*
* SELECT 12*34+56 from mara into :lv_out
*
* ENDEXEC.
* CATCH cx_sy_native_sql_error INTO oref.
* CALL METHOD oref->get_text
* RECEIVING
* result = msg.
* WRITE msg.
* ENDTRY.
*ENDFORM. "frm_string_count
REPORT zsolar.
DATA: lv_re TYPE string.
PERFORM frm_test USING '20*(2+3)' CHANGING lv_re.
WRITE:/ lv_re.
*&---------------------------------------------------------------------*
*& Form frm_test
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LV_IN text
* -->LV_OUT text
*----------------------------------------------------------------------*
FORM frm_test USING lv_in CHANGING lv_out.
DATA: code TYPE TABLE OF rssource-line,
prog(8) TYPE c, msg(120) TYPE c, lin(3) TYPE c,
wrd(10) TYPE c, off(3) TYPE c.
DATA: lv_temp TYPE string.
CONCATENATE 'SELECT' lv_in 'from mara into :lv_out' INTO lv_temp SEPARATED BY space.
APPEND 'PROGRAM SUBPOOL.' TO code.
APPEND 'FORM frm_string_count2 USING lv_in CHANGING lv_out.' TO code.
APPEND 'DATA: msg TYPE string,' TO code.
APPEND 'oref TYPE REF TO cx_sy_native_sql_error.' TO code.
APPEND 'TRY .' TO code.
APPEND 'EXEC SQL.' TO code.
* APPEND 'SELECT 12*34+56 from mara into :lv_out' TO code.
APPEND lv_temp TO code.
APPEND 'ENDEXEC.' TO code.
APPEND 'CATCH cx_sy_native_sql_error INTO oref.' TO code.
APPEND 'CALL METHOD oref->get_text' TO code.
APPEND 'RECEIVING' TO code.
APPEND 'result = msg.' TO code.
APPEND 'WRITE msg.' TO code.
APPEND 'ENDTRY.' TO code.
APPEND 'ENDFORM.' TO code.
GENERATE SUBROUTINE POOL code NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.
IF sy-subrc EQ 0.
PERFORM frm_string_count2 IN PROGRAM (prog) USING lv_in CHANGING lv_re IF FOUND.
ENDIF.
ENDFORM. "frm_test
*&---------------------------------------------------------------------*
*& Form frm_string_count
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*FORM frm_string_count2 USING lv_in CHANGING lv_out.
* DATA: msg TYPE string,
* oref TYPE REF TO cx_sy_native_sql_error.
* TRY .
* EXEC SQL.
*
* SELECT 12*34+56 from mara into :lv_out
*
* ENDEXEC.
* CATCH cx_sy_native_sql_error INTO oref.
* CALL METHOD oref->get_text
* RECEIVING
* result = msg.
* WRITE msg.
* ENDTRY.
*ENDFORM. "frm_string_count
相关文章推荐
- 取得一个字符串表达式的计算结果(实现方法二)
- 输入一个字符串表达式,输出计算结果
- 输入一个字符串表达式,输出计算结果(队列、栈的应用)
- 给定一个表示分数加减表达式的字符串,需要以字符串格式返回计算结果。结果表达式也是分数式
- 给定一个字符串表达式s,计算其值(使用string和stack实现)
- 10_9_2从类MyClass中派生一个类MyDervedClass,重写GetString(),使用该方法的基类实现代码从基类中返回一个字符串,但在返回的字符串中添加文本"(output fro)"
- 自己写的一个解析运算式并得到结果的方法(最后是以Double型表示,中间是以BigDecimal计算中间结果的,临时起意写的,没有注释)
- 用递归实现判断一个字符串是否是回文的方法
- 三种方法实现从“一个(组)查询过程中返回两个表的查询结果”
- 三种方法实现从“一个(组)查询过程中返回两个表的查询结果”
- 实现一个函数,可以左旋字符串中的k个字符。(三种方法)
- 给定一个布尔表达式,由0、1、&、|和^等符号组成,以及一个想要的布尔结果result,实现一个函数,算出有几种括号的放法可使该表达式
- 10.6 分别用字符数组和字符指针作函数参数两种方法编程实现在字符串每个字符间插入一个空格的功能
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 计算任意一个数学运算表达式字符串的值
- 字符串与正则表达式1、字符串 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。
- 用JavaScript的正则表达式验证网址格式是否正确,方法很多,这只是一个实现的方法.
- javascript 计算一个字符串表达式的值
- 实现一个简单的字符串格式化方法
- PHP取得一个类的属性和方法的实现代码