Gregg wrote:
> Cool Andrew!

Thanks!

> Since the logic! definition doesnt' take a size, it's limited to single
char values? Boolean/logic values are something that always give me a
headache because it seems like nobobdy could agree on what chars or strings
to map to.

Currently, the DOS/Windows 3.1 application only use a single character to
store logic values, so I haven't implemented multicharacter versions. It's
fairly easy to add, I feel. Once you do so, please let me have a copy!

The latest version is attached (and I've sent a copy directly to you).

Andrew Martin
Super Cool Rebolutionary! :)
ICQ: 26227169 http://valley.150m.com/
-><-



-- Attached file included as plaintext by Listar --
-- File: Fixed.r

Rebol [
        Name: 'Fixed
        Title: "Fixed"
        File: %Fixed.r
        Author: "Andrew Martin"
        eMail: [EMAIL PROTECTED]
        Web: http://valley.150m.com
        Date: 28/August/2002
        Version: 1.1.0
        Purpose: {Cuts up fixed width data file into Rebol values in an association.}
        Category: [util 1]
        ]

Fixed: function [
        {Cuts up fixed width data file into Rebol values in an association.}
        Data [string! binary!]  "The data file"
        Dialect [block!]        "The dialect controlling the cutting."
        /Debug  "Prints out the Fields and Values as they occur."
        ] [
        Values Field Width Widths Value Type Previous With Line
        ] [
        Values: make block! 200
        parse Dialect [
                any [
                        [
                                'skip (Width: 1) opt [set Width integer!] (
                                        Data: next at Data Width
                                        )
                                ]
                        | [
                                set Field string! (Width: 1 Type: string!) [
                                        [
                                                [set Width integer! set Type 'binary!] 
(
                                                        Value: attempt [to-binary 
copy/part Data Width]
                                                        )
                                                ]
                                        | [
                                                [set Width integer! set Type ['issue! 
| 'integer! | 'date! | 'binary!]] (
                                                        Value: attempt [load trim 
to-string copy/part Data Width]
                                                        )
                                                ]
                                        | [
                                                [set Widths integer! 'char!] (
                                                        use [Block] [
                                                                Block: make block! 
Widths
                                                                loop Widths [
                                                                        Value: trim 
to-string copy/part Data 1
                                                                        Data: next Data
                                                                        if not empty? 
Value [
                                                                                append 
Block to-char Value
                                                                                ]
                                                                        ]
                                                                Value: Block
                                                                ]
                                                        Width: 0
                                                        )
                                                ]
                                        | [
                                                ['char!] (
                                                        Value: attempt [to-char trim 
to-string copy/part Data Width]
                                                        )
                                                ]
                                        | [
                                                ['logic!] (
                                                        Value: switch/default trim 
to-string copy/part Data Width [
                                                                "Y" [true]
                                                                "N" [none]
                                                                ] [
                                                                none
                                                                ]
                                                        )
                                                ]
                                        | [
                                                [set Width integer! (With: none) opt 
[/with set With string!]] (
                                                        Value: to-string copy/part 
Data Width
                                                        either With [
                                                                trim/with Value With
                                                                ][
                                                                trim Value
                                                                ]
                                                        )
                                                ]
                                        | [
                                                [set Widths into [some integer!]] (
                                                        Value: make string! 100
                                                        foreach Width Widths [
                                                                Line: trim to-string 
copy/part Data Width
                                                                if not empty? Line [
                                                                        append Line 
newline
                                                                        ]
                                                                Data: next at Data 
Width
                                                                append Value Line
                                                                ]
                                                        Width: 0
                                                        )
                                                ]
                                        ] (
                                        Data: at Data 1 + Width
                                        Previous: associate? Values Field
                                        either Previous: associate? Values Field [
                                                either series? Previous [
                                                        append Previous Value
                                                        ] [
                                                        if not empty? Value [
                                                                associate-many Values 
Field Value
                                                                ]
                                                        ]
                                                ] [
                                                if any [
                                                        all [
                                                                series? Value
                                                                not empty? Value
                                                                ]
                                                        not series? Value
                                                        ] [
                                                        associate Values Field Value
                                                        ]
                                                ]
                                        if Debug [
                                                print rejoin [Field ": " mold Value 
"."]
                                                ]
                                        )
                                ]
                        | [
                                set Value any-type! set Value1 any-type! (
                                        print rejoin ["Error: Couldn't understand: " 
mold Value "&" mold Value1 "!"]
                                        halt
                                        )
                                ]
                        ]
                end
                ]
        reduce [Values Data]
        ]

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to