[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    { CB> ...I work For a bank and would like to create a Program to
     CB> maintain better Record of our Cashier Checks and also any
     CB> stop payments on them..I have done very little Programming
     CB> on pascal. Ok here goes:
     CB>         I would like to make the input of numbers to move
     CB>         from a fixed point to the left and insert commas
     CB>         every three digits For monetary figures?

    You will need to set up a dedicated Character by Character input routine using
    ReadKey and controlling the display yourself.  After each Character is entered
    examine it and determine whether or not to add a comma.  The following very
    simple (and untested) routine demonstrates this.

    For a better way to do such input find and download TCSEL003.* from a PDN node
    near you and study the KEYINPUT Unit.  You may be able to modify it to do
    exactly what you want or perhaps use it as a guide to producing your own
    "bullet proof" input routine.
    }
    Uses
      Crt;

    Function LastPos(ch : Char; S : String): Byte;
      { Returns the last position of ch in S or zero if ch not in S }
      Var
        x   : Word;
        len : Byte Absolute S;
      begin
        x := succ(len);
        Repeat
          dec(x);
        Until (x = 0) or (S[x] = ch);
        LastPos := x;
      end;  { LastPos }

    Procedure GetNumber(fieldwidth: Byte);
      Var ch : Char;
          x,y: Byte;
          i  : Word;
          st : String;
      begin
        st := '';
        Write('Enter a number: ');
        x := WhereX;
        y := WhereY;
        Repeat
          ch := ReadKey;
          Case ch of
            '0'..'9': begin
                        if LastPos(',',st) = length(st)-3 then
                          st := st + ',';
                        st := st + ch;
                      end;
            #8      : begin
                        delete(st,length(st),1);
                        if st[length(st)] = ',' then
                          delete(st,length(st),1);
                      end;
            #13     : Exit;
          end;
          gotoXY(x,y);
          Write(st:fieldwidth);
        Until False;
      end;

    begin
      Writeln;
      Writeln;
      getnumber(14);
    end.

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]