[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Most succinct way to parse an HTTP header string
- From: Ralph Hempel <rhempel@...>
- Date: Thu, 29 Aug 2013 12:16:53 -0400
David Crayford wrote:
I've ported Lua to IBM mainframes and it's a joy and very fast, in some
cases by over an order of magnitude. However, selling it is going to be
difficult to the masses that grew up on REXX.
I want to parse a HTTP header string "name:value" pair. In REXX this is
quite simple with the parse instruction, "parse var line name ":"
value". In lua it seems much trickier using
the example i have "local _, _, name, value = string.find(line, "^([^:
]+)%s*:%s*(.+)")". I understand that captures are much more powerful but
what I want is to dumb them down so there
is a lower entry level of skill required to do what is simple in REXX.
Maybe it's possible to write a parse(line,"%s : %s:) function or
something similar. It's most likely the case that I just don't
know Lua string handling well enough to grok what is the best solution.
WARNING: Untested code follows...and don't take my comments re REXXers
too seriously
I think you are saying that this:
local _, _, name, value = string.find(line, "^([^:]+)%s*:%s*(.+)")
is too hard for your typical REXX programmer to figure out - maybe
that's true. The pattern will be generally useful, and they don't need
to figure it out every place they need to parse an HTTP Header string,
so I would suggest wrapping if like this (make foo some helpful library
name)
foo.regex = { ["httpHeader'] = "^([^:]+)%s*:%s*(.+)"
, ....
, ....
}
local httpHeader = foo.regex.httpHeader
local _, _, name, value = string.find(line, httpHeader )
or if you want to skip the local:
local _, _, name, value = string.find(line, foo.regex.httpHeader )
It's a bit of work to gather up the common regexen you need, but it will
help your feeble minded REXXers do their job without taxing their
remaining brain cells.
My 2c
Ralph