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

{
From: BRIAN PAPE
Subj: Reading from strings (PARSE)
---------------------------------------------------------------------------
Can anyone out there tell me how to read a portion of one string
variable into another?

I grabbed this code from one of my batch file utilities.  It isn't real
efficient, as it uses COPY and DELETE, but it doesn't have to be, since
it is only called once a program.  Where I have cfg:cfgrec, just replace
cfgrec with your own kind of record. }

type
  MyRec = record
    r_var : integer;
  end;
...
Anyway, the GET function is what parses the /x:xxxx stuff out of a
regular string.  The PARSE procedure gets the actual command tail
from the PSP and keeps GETting parameters from it until it is empty.
BTW, the atoi() function I used is merely val() turned into a function.
----------------------------------
procedure parse(var cfg:cfgrec);
function get(var s:string):string;
var i,j : byte;slashflag : boolean;
begin
  i := 1;
  while (s[i] = ' ') and (i<=length(s)) do inc(i);
  slashflag := s[i] in ['-','/'];
  j := succ(i);
  while ((slashflag and not (s[j] in ['-','/'])) or
        (not slashflag and not (s[j] = ' '))) and
        (j<=length(s)) do inc(j);
  get := copy(s,i,j-i);
  delete(s,1,j-1);
end;  { get }

var s:^string;t:string;
begin
  s := ptr(prefixseg,$80);  { DTA from PSP }
  cfg.working_msg := '';
  cfg.error_msg := '';
  cfg.drive := 0;
  cfg.pause_on_error := false;
  cfg.how_many_retries := 1;
  while s^<>'' do
    begin
      t := get(s^);
      if t[1] in ['-','/'] then
        begin
          if length(t)>=2 then
            case upcase(t[2]) of
              'C':cfg.how_many_retries :=
                  atoi(strip(copy(t,4,length(t)-3),' '));
              'H','?':begin writehelp; halt(0); end;
              'W':cfg.working_msg := copy(t,4,length(t)-3);
              'E':cfg.error_msg := copy(t,4,length(t)-3);
              'P':cfg.pause_on_error := true;
            end;  { case }
        end  { if }
      else
        cfg.drive := ord(upcase(t[1]))-65;
    end;  { while }
end;  { parse }


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