HomePage | Optical Illusions | War Stories | QBasic | Dads Navy Days | Bristol | Bristol, USA | Bristol, Canada | Terre Haute | Miscellany | Web Stuff | About Ray | Site Map | Site Search | Messages | Credits | Links | Web Rings

QBasic | Errors | 40lb Weight | Bits | Chance | Colours | Dates | Delays | File Dialog | Files | Input | Matching | Menus | Mouse | Numbers | SeqNo | SIRDS | Sorts | Text | Timer | DLoads

Text Manipulation:

QBasic contains some very good text manipulation functions. Most are covered in the help file.

Now and again it's useful to extract words from strings. The following code will do this, and put the words into an array. It is part of a longer program, Parse.bas, that is available on the downloads page. It uses INSTR to look for the spaces in the string and then extract the word.

'Parse          Ray Thomas      February 2002

OPTION BASE 1

DIM LongStr AS STRING           'Your string
DIM StrArray(10) AS STRING      'Array to hold split text
DIM Num AS INTEGER              'Holds the space position
DIM OldNum AS INTEGER           'Holds the old space position
DIM StrLen AS INTEGER           'The number of characters between spaces
DIM Count AS INTEGER            'General counter

Num = 0
OldNum = 1
Count = 1
LongStr$ = "My name is Ray and I wrote this"

CLS

DO
        Num = INSTR(Num + 1, LongStr$, " ")
        StrLen = Num - OldNum
        IF Num > 0 THEN
                StrArray$(Count) = MID$(LongStr$, OldNum, StrLen)
        ELSE
                StrArray$(Count) = MID$(LongStr, OldNum)
        END IF
        Count = Count + 1
        OldNum = Num + 1
LOOP UNTIL Num = 0

Animating Text:

Scrolling text

The following program, Ticker.bas, produces a ticker type or scrolling display of text.

'Ticker         Ray Thomas      February 2002

'A program to produce a ticker tape effect

DIM TickStr AS STRING
DIM LongStr AS STRING * 40
DIM LenStr AS INTEGER
DIM CountTxt AS INTEGER
DIM CountDly AS LONG
DIM CountSrnd AS INTEGER
DIM XSurround AS INTEGER
DIM YSurround AS INTEGER

'*** set variables and constants ***

TickStr$ = "My name is Ray, and I wrote this.   "
LongStr$ = TickStr + TickStr
LenTick = LEN(TickStr$)
LenLong = 40
CountTxt = 0
CountDly = 0
XSurround = 18
YSurround = 7

CLS

DO
   '*** Do the surround ***

   XSurround = 18
   YSurround = 7
   CountSrnd = 0

      DO
         LOCATE YSurround, XSurround
         CountSrnd = CountSrnd + 1
         IF CountSrnd >= 0 AND CountSrnd < LenLong + 4 THEN XSurround = XSurround + 1
         IF CountSrnd >= LenLong + 4 AND CountSrnd < LenLong + 8 THEN YSurround = YSurround + 1
         IF CountSrnd >= LenLong + 8 AND CountSrnd < (2 * LenLong) + 11 THEN XSurround = XSurround - 1
         IF CountSrnd >= (2 * LenLong + 11) THEN YSurround = YSurround - 1
         COLOR 2
         IF CountSrnd MOD 2 = 0 THEN COLOR 12
         PRINT CHR$(15);
      LOOP UNTIL CountSrnd = (2 * LenLong) + 14
      
      '*** Print the text ***
       
      LOCATE 9, 20
      CountTxt = CountTxt + 1
      IF CountTxt = LenTick + 1 THEN CountTxt = 1
      LongStr = MID$(TickStr$, CountTxt) + TickStr$
      COLOR 7
      PRINT LongStr$
       
      '*** Delay Loop ***     

      CountDly = 0

      DO
         CountDly = CountDly + 1
      LOOP UNTIL CountDly = 400000

   LOOP UNTIL INKEY$ <> ""

END

The program makes use of the fact that you can specify a string to be a fixed width. This is done in the line

DIM LongStr AS STRING * 40

Most of the program is taken up with drawing the surrounding border and a delay loop to stop the text looking so jerky as it moves across the screen. The alternating colours in the border are produced by the lines ...

         COLOR 2
         IF CountSrnd MOD 2 = 0 THEN COLOR 12

The color is set to two and then if the MOD 2 of CountSrnd (a counter of the number of stars in the border) is equal to 0 then the colour is changed. The MOD of a number is a simple division between two numbers with MOD returning the remainder. So 4 MOD 3 would be 1, and 6 MOD 4 will be 2.

The scrolling text is produced by the lines ...

      LOCATE 9, 20
      CountTxt = CountTxt + 1
      IF CountTxt = LenTick + 1 THEN CountTxt = 1
      LongStr = MID$(TickStr$, CountTxt) + TickStr$
      COLOR 7
      PRINT LongStr$

What they do is move through the text one letter at a time and adding a complete string of the same text to it. As the length of the string variable is set at 40, not all the text will fit into the variable and is discarded. The variable, LongStr, is then repeatedly printed to the screen, this gives the impression of scrolling text.

QBasic | Errors | 40lb Weight | Bits | Chance | Colours | Dates | Delays | File Dialog | Files | Input | Matching | Menus | Mouse | Numbers | SeqNo | SIRDS | Sorts | Text | Timer | DLoads

HomePage | Optical Illusions | War Stories | QBasic | Dads Navy Days | Bristol | Bristol, USA | Bristol, Canada | Terre Haute | Miscellany | Web Stuff | About Ray | Site Map | Site Search | Messages | Credits | Links | Web Rings