Re: RE: representation problem
You might find this approach, using types, useful:
with trace
--trace(1)
-- General string: integer values 0 - 255
global type String(object x)
if atom(x) then
return 0
end if
for i = 1 to length(x) do
if not integer(x[i]) or
x[i] < 0 or
x[i] > 255 then
return 0
end if
end for
return 1
end type
-- Printable string: integer values 32 - 126, plus tab, newline,
carriage-return,
-- formfeed, bell and backspace.
global type DisplayString(object x)
if atom(x) then
return 0
end if
for i = 1 to length(x) do
if not integer(x[i]) or
x[i] < 7 or
x[i] > 126 then
return 0
end if
if x[i] < 32 and
x[i] > 13 then
return 0
end if
end for
return 1
end type
procedure ShowObject(integer FH, object a)
sequence temp, sign
integer l, r
if DisplayString(a) then
printf(FH, "\"%s\"", {a})
elsif sequence(a) then
puts(FH, '{')
for i = 1 to length(a) do
ShowObject(FH, a[i])
if i != length(a) then
puts(FH, ',')
end if
end for
puts(FH, '}')
elsif integer(a) then
printf(FH, "%d", a)
else
if a < 0 then
sign = "-"
a = -a
else
sign = ""
end if
temp = sprintf("%15.15f", a)
l = 1
while temp[l] = '0' do
l += 1
end while
if temp[l] = '.' then
l-=1
end if
r = length(temp)
while temp[r] = '0' do
r -= 1
end while
if temp[r] = '.' then
r -= 1
end if
printf(FH, "%s", {sign & temp[l..r]})
end if
end procedure
ShowObject(1, {1,2,3,4})
puts(1,'\n')
ShowObject(1, "1234")
puts(1,'\n')
ShowObject(1, {"1234",-16.544,2,{"first","last"}})
puts(1,'\n')
---------------
Derek.
18/03/2002 9:21:49 AM, bensler at mail.com wrote:
>
>There is no distinguishable difference between the 2 except how you read
>it.
>
>a = {65,83,67,73,73} = b = "ASCII"
>
>If it's data generated by your program, then you can use the first or
>last element of the sequence as a designator.
>
>I'd use the last element, with 0 for strings and 1 for byte data.
>
>a = {65,83,67,73,73,1} -- bytes
>b = "ASCII"&0 -- string
>
>Chris
>
>gwalters at sc.rr.com wrote:
>> I'm having trouble with this problem. How do you destinguish between
>> these.
>> They have the same length and they are both sequences but I need to
>> treat
>> them differently. for a i need to loop through and print each number but
>> for
>> b i need to print the string. I'm trying to modify Buddy Hyllberg data
>> dump
>> but am lost in this problem.
>>
>> sequence a,b
>>
>> a = {1,2,3,4}
>> b = "1234"
>>
>> printf(1,"len a = %d len b = %d\n",{length(a),length(b)})
>>
>> if atom(a) then puts(1,"a is an atom\n") else puts(1,"a is a seq\n") end
>> if
>>
>> if atom(b) then puts(1,"b is an atom\n") else puts(1,"b is a seq\n") end
>> if
>>
>>
>> b = gets(0)
>>
>> george
>>
>>
>
>
>
---------
Cheers,
Derek Parnell
ICQ# 7647806
|
Not Categorized, Please Help
|
|