Article 12016 of comp.lang.perl: Path: feenix.metronet.com!news.utdallas.edu!convex!cs.utexas.edu!howland.reston.ans.net!pipex!demon!wiggins.isri.unlv.edu!grover Newsgroups: comp.lang.perl From: grover@wiggins.isri.unlv.edu (Kevin Grover) Resent-from: Gerry King Resent-date: Sat, 26 Mar 1994 15:22:38 +0000 Subject: Re: Read/Write dBase files X-Newsreader: TIN [version 1.1 PL8] Resent-Date: Fri, 25 Mar 1994 09:38:54 -0800 Resent-From: Kevin Grover Date: Fri, 25 Mar 1994 01:38:54 +0000 Message-ID: <9403251742.aa02700@post.demon.co.uk> Sender: usenet@demon.co.uk Lines: 76 In article <764547663snx@caspe.demon.co.uk> (in comp.lang.perl) you wrote: > Has anyone worked out how to read/write dBase files from Perl? ISTR that > handling dbase files as associative arrays was in the wishlist. If nobody > has tackled this I guess I'll have to have a go. I've been using Perl for > a little while (the Llama book was a big help, great job Randal!) but always > in text mode. > A dbase header has a few longs and unsigneds. How do I read/write these from > Perl? > Gerry King > +------------------------+------------------------------+ > | CASPE Research | voice +44 71 229 8739 | > | 22 Palace Court | fax +44 71 221 9892 | > | Bayswater | internet caspe.demon.co.uk | > | London W2 4HU | | > +------------------------+------------------------------+ use the read/write system call w/ pack and unpack also, if you want the thing to work in DOS, you need to use the binmode function (it places a file descriptor into binary mode -- it is ignored on non-dos machines). there is no corrosponding asciimode (i.e. once binmode has been used, only way to get back is close and reopen the file) Included below is a program called "hex", it will dump a file in HEX (w/ printable ascii). You can use it as an example Keep in mind, the binmode is only needed on DOS machines.... -- - kev, grover@isri.unlv.edu #!/local/perl/bin/perl # ============================================================================= # $Id: hex,v 1.1 1993/04/21 17:27:16 grover Exp $ # # HEX in perl: dump a file in hexadecimal, and printable characters # # - Kevin Grover, grover@isri.unlv.edu # ============================================================================= die "Usage: hex infile [infile ...]\n" unless @ARGV; $spaces = " " x 80; foreach $t (0..31,127..255) { $char[$t] = "."; } foreach $t (32..126) { $char[$t] = sprintf ("%c",$t); } while ($f = shift @ARGV) { open (IN, "<$f") || warn "Can't open input $f: $!\n",next; binmode IN; &process; $offset = 0; close (IN); } sub process { $temp = ""; while (read(IN, $temp, 16)) { &outhex; } } sub outhex { printf ("%08X: ", $offset); $offset += 16; for ($i=0; $i