如何使用Progress 4GL通过ASCII控制码分割输入



如何使用Progress按组分隔符拆分此条形码?我试过chr(29),但运气不好。

条形码扫描到记事本++中:https://i.stack.imgur.com/7YIbw.png

条形码扫描到输入字段:2409271405202120330017100282

谢谢。

def var c as char no-undo.
def var i as int no-undo.
update c format "x(50)".
do i = 1 to length(c):
    message substr(c, i, 1) = chr(29).
end.

问题是GS是一个未定义的控制代码。所以你需要让它被认可。

在protermcap中的终端条目中添加以下内容,将GS定义为F13:

:(F13)=\035:\

(GS的八进制代码是\035,F13是一个未定义的功能键,所以组合应该可以工作。我没有扫描仪可以测试,但这适用于我可以在键盘上键入的控制代码…)

然后使用这样的代码:

define variable bc as character no-undo format "X(50)".
update bc editing:
  if lastkey = 313 then
    apply ".".  /* 313 is the code for F13 */
   else
    apply lastkey.
end.

这将导致插入"."而不是GS。这将允许您使用"."来解析字符串,而不是GS.

这是一个粗略的猜测,但我在想ENTRY(条目编号、条形码字符串、"组分隔符字符串")?

这对我有效:

/* create a test file (otherwise not needed...)
 */
output to "barcode.dat".
put control "240927140520" chr(29) "2120330017" chr(29) "100282".
output close.
/* if you already have barcode.dat start here
 */
define variable m  as memptr    no-undo.
define variable bc as character no-undo.
set-size( m ) = 100.
input from "barcode.dat" binary no-convert.
import unformatted m.
input close.
bc = get-string( m, 1 ).
display
  entry( 1, bc, chr(29)) format "x(12)" skip
  entry( 2, bc, chr(29)) format "x(12)" skip
  entry( 3, bc, chr(29)) format "x(12)" skip
.

相关内容

  • 没有找到相关文章

最新更新