我想知道如何在QBasic中获取最后打印的文本。就像程序打印几行一样,那么如何打印最后一行。
像这样-
Print "aaaaaaa"
Print "bbbbbbb"
然后程序将获得最后打印的行i.e. bbbbbbb
这样的事可能吗?
str$ = "aaaaaaa"
PRINT str$
str$ = "bbbbbbb"
PRINT str$
PRINT "last printed line:"; str$
或者,作为explained here,您可以通过在段和HB800使用PEEK从屏幕内存中检索字符,所以像这样的东西
DEF SEG = &HB800
mychar = PEEK(1) 'etc
您必须跟踪上次打印的哪一行,以了解您需要PEEK的确切位置,这样可能会很快变得非常复杂......
出于这个原因,我建议你重新考虑你在这里想要完成的是什么,因为像这样的“屏幕抓取”通常只是一个坏主意。
鉴于最后打印的字符串没有以分号结尾,此代码应该可以解决问题:
FOR char.num = 1 TO 80
last.line$ = last.line$ + chr$(SCREEN(CSRLIN - 1, char.num))
NEXT char.num
PRINT "Content of last line printed to is:"; last.line$
说明:CSRLIN
返回游标的当前行。 SCREEN(y, x)
在屏幕上的y,x位置(行,行)返回字符的ascii代码。每次不以分号结尾的字符串被打印到屏幕上时,它将被打印在光标的当前行(y位置)上,然后增加1。
我意识到这个问题已经有了一个公认的答案,但我有自己的解决方案,而不是试图找出PRINT
最后PRINT
ed你改为使用你自己的PRINT
SUB
在这个例子MYPRINT
。虽然它不完美,它只需要字符串(因此STR$(123
)并使用SHARED
变量,这不一定是可取的,它比在记忆中戳更好。
DECLARE SUB MYPRINT (text$)
DIM SHARED lastprint$
MYPRINT ("Hello, World!")
MYPRINT (STR$(123))
MYPRINT ("Hi Again")
MYPRINT (lastprint$)
SUB MYPRINT (text$)
PRINT (text$)
lastprint$ = text$
END SUB
输出:
Hello, World!
123
Hi Again
Hi Again