[#129195] Is compatibility important for us? — Esteban Manchado Vel痙quez <zoso@...>

Hi all,

28 messages 2005/02/01
[#129199] Re: Is compatibility important for us? — James Britt <jamesUNDERBARb@...> 2005/02/01

Esteban Manchado Vel痙quez wrote:

[#129204] Re: Is compatibility important for us? — Francis Hwang <sera@...> 2005/02/01

[#129207] Re: Is compatibility important for us? — Eric Hodel <drbrain@...7.net> 2005/02/01

On 31 Jan 2005, at 18:21, Francis Hwang wrote:

[#129209] Re: Is compatibility important for us? — Francis Hwang <sera@...> 2005/02/01

[#129214] Re: Is compatibility important for us? — "Trans" <transfire@...> 2005/02/01

Francis,

[#129216] Re: Is compatibility important for us? — Francis Hwang <sera@...> 2005/02/01

[#129698] Re: Is compatibility important for us? — Esteban Manchado Vel痙quez <zoso@...> 2005/02/04

I had this on "postponed", and I just realized. Sorry.

[#129718] Re: Is compatibility important for us? — James Britt <jamesUNDERBARb@...> 2005/02/05

Esteban Manchado Vel痙quez wrote:

[#129808] Re: Is compatibility important for us? — Esteban Manchado Vel痙quez <zoso@...> 2005/02/05

On Sat, Feb 05, 2005 at 10:29:11AM +0900, James Britt wrote:

[#129218] Partial function application (was: Re: Binding precedence for first sym...) — E S <eero.saynatkari@...>

Trans wrote:

13 messages 2005/02/01
[#129220] Re: Partial function application (was: Re: Binding precedence for first sym...) — "Trans" <transfire@...> 2005/02/01

[#129289] Newbie: How to delete a Rails app (Windows) — peter.cutting@...

Hi

25 messages 2005/02/01
[#129362] Re: Newbie: How to delete a Rails app (Windows) — Douglas Livingstone <rampant@...> 2005/02/02

> but how do I delete? (If I just delete then I get a permissions

[#129373] Re: Newbie: How to delete a Rails app (Windows) — Caio Tiago Oliveira <caiot1@...> 2005/02/02

Douglas Livingstone, 2/2/2005 06:04:

[#129380] Re: Newbie: How to delete a Rails app (Windows) — peter.cutting@... 2005/02/02

yes the switching off may have helped (will try logging off next time

[#129385] Nuby needs an intro to testing for Win 2K — Barry Sperling <barry@...> 2005/02/02

[#129293] Re: [QUIZ] To Excel (#17) — "Graham Foster" <graham@...>

> Years ago, on a job developing custom reporting software, this was

15 messages 2005/02/01

[#129316] Wee 0.7.0 + Tutorial Videos — Michael Neumann <mneumann@...>

Hi,

27 messages 2005/02/01
[#129449] Re: Wee 0.7.0 + Tutorial Videos — itsme213@... 2005/02/03

Michael, I may be doing something wrong, but none of the MPEGs worked

[#129345] ANN: ParseTree 1.3.3 and ruby2c 1.0.0 beta 1 — Ryan Davis <ryand-ruby@...>

Actual announcements are on http://blog.zenspider.com/

24 messages 2005/02/02

[#129351] yarv and dbi — jm <jeffm@...>

Anyone out there tried dbi with yarv

18 messages 2005/02/02
[#129358] Re: yarv and dbi — SASADA Koichi <ko1@...> 2005/02/02

jm <jeffm@ghostgun.com> wrote :

[#129451] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...>

"

90 messages 2005/02/03
[#130693] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/13

Ilias Lazaridis wrote:

[#130749] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Douglas Livingstone <rampant@...> 2005/02/14

> From the communities behaviour, I extract the following answer:

[#130784] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/14

Douglas Livingstone wrote:

[#130785] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Luke Graham <spoooq@...> 2005/02/14

From the link - "fictive technology collection". Ive worked on some of

[#130786] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Luke Graham <spoooq@...> 2005/02/14

Some of it is possible. I have created persistent Ruby objects, for

[#130823] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Austin Ziegler <halostatue@...> 2005/02/14

On Mon, 14 Feb 2005 17:49:18 +0900, Luke Graham <spoooq@gmail.com> wrote:

[#130856] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/14

Austin Ziegler wrote:

[#130871] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Austin Ziegler <halostatue@...> 2005/02/14

On Tue, 15 Feb 2005 04:09:54 +0900, Ilias Lazaridis

[#131021] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/15

Austin Ziegler wrote:

[#131025] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Thomas E Enebo <enebo@...> 2005/02/15

On Wed, 16 Feb 2005, Ilias Lazaridis defenestrated me:

[#131031] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/15

Thomas E Enebo wrote:

[#131036] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Thomas E Enebo <enebo@...> 2005/02/15

On Wed, 16 Feb 2005, Ilias Lazaridis defenestrated me:

[#131039] Re: [EVALUATION] - E01: The Java Failure - May Ruby Helps? — Ilias Lazaridis <ilias@...> 2005/02/15

Thomas E Enebo wrote:

[#129452] RedCloth 3.0.2 -- Please, oh please, let this be the one — why the lucky stiff <ruby-talk@...>

Okay, okay. The tumblers are clicking, the clouds are parting.

15 messages 2005/02/03

[#129554] lack of reaction to latest ruby implementations — Alexander Kellett <ruby-lists@...>

working on alternatives for the ruby runtime has

37 messages 2005/02/03

[#129686] iteration the ruby way — Navindra Umanee <navindra@...>

Hi,

18 messages 2005/02/04

[#129726] Ruby for closed source projects — Michael Gebhart <mail@...>

Hi,

16 messages 2005/02/05

[#129778] Korundum: error when overriding a KDE::RootPixmap method — Martin Traverso <martin@...>

Hi,

15 messages 2005/02/05

[#129831] Benchmark Mono - Ruby — Michael Gebhart <mail@...>

Hi,

21 messages 2005/02/06

[#129878] Ruby Interactive Shell — "Jenjhiz" <jenjhiz@...>

Hello,

18 messages 2005/02/06

[#129959] delayed string interpolation — Navindra Umanee <navindra@...>

Hi,

14 messages 2005/02/07

[#130044] web testing with Ruby — Jason Sweat <jason.sweat@...>

Does anyone have suggestions for projects/libraries to web test code

12 messages 2005/02/07

[#130068] Grid computing with Ruby? — Alexander Staubo <alex@...>

I have an interest in distributed computing and so-called grid

11 messages 2005/02/08

[#130090] Squeak like environment for Ruby — Logan Capaldo <logancapaldo@...>

Lately I've been playing around with Squeak (http://www.squeak.org/),

20 messages 2005/02/08
[#130091] Re: Squeak like environment for Ruby — Caio Tiago Oliveira <caiot1@...> 2005/02/08

Logan Capaldo, 8/2/2005 00:45:

[#130108] Re: Squeak like environment for Ruby — Alexander Kellett <ruby-lists@...> 2005/02/08

On Feb 8, 2005, at 4:59 AM, Caio Tiago Oliveira wrote:

[#130102] Syck 0.50 -- The new YAML is here for testing — why the lucky stiff <ruby-talk@...>

Finally, I can go back to drawing ponies out on the bridge by the old

13 messages 2005/02/08

[#130180] Ruby users in India? — Premshree Pillai <premshree.pillai@...>

Hi,

20 messages 2005/02/08

[#130280] How to mimic Perl's `s///' in Ruby? — Jos Backus <jos@...>

Given Perl's

18 messages 2005/02/09

[#130305] Phone number to words — Jordi Bunster <jordi@...>

Does anyone have one of those algorithms that convert a phone number to

13 messages 2005/02/10

[#130327] Building a Better Functor — "John W. Long" <ng@...>

Hi,

29 messages 2005/02/10

[#130399] A Ruby-relevant quote from Alan Kay — "Curt Hibbs" <curt@...>

ACM Queue just published an interview with Alan Kay (the creator of

27 messages 2005/02/10
[#130400] Re: A Ruby-relevant quote from Alan Kay — PA <petite.abeille@...> 2005/02/10

[#130408] Re: A Ruby-relevant quote from Alan Kay — Douglas Livingstone <rampant@...> 2005/02/10

> Steve Wart about "why Smalltalk never caught on":

[#130573] utilizing ++ and -- for comments — "Pe, Botp" <botp@...>

Since ++ and -- wont see the light of day in ruby, can we use it for comment

27 messages 2005/02/12
[#130587] Re: utilizing ++ and -- for comments — "George Moschovitis" <george.moschovitis@...> 2005/02/12

I also think that the =begin, =end notation is not comfortable to use.

[#130595] Re: utilizing ++ and -- for comments — Douglas Livingstone <rampant@...> 2005/02/12

> for example /* */

[#130707] Printing why's (poignant) guide to ruby — Richard Dale <Richard_Dale@...>

I'd like to try ruby on non-programmers teaching them using why's amazing

62 messages 2005/02/13
[#130714] Re: Printing why's (poignant) guide to ruby — Navindra Umanee <navindra@...> 2005/02/13

Richard Dale <Richard_Dale@tipitina.demon.co.uk> wrote:

[#130716] Re: Printing why's (poignant) guide to ruby — Alexander Kellett <ruby-lists@...> 2005/02/13

i'm really puzzled by this.

[#130731] Re: Printing why's (poignant) guide to ruby — Navindra Umanee <navindra@...> 2005/02/13

Alexander Kellett <ruby-lists@lypanov.net> wrote:

[#130843] Re: Printing why's (poignant) guide to ruby — Marcus Sharp <brothermarcus@...> 2005/02/14

*putting on flame retardant pants*

[#130715] Ruby on Windows: debugger questions and comments — umptious@... (JC)

'm evaluating scripting languages for a client. Ruby as a language

28 messages 2005/02/13

[#130742] (OT) Programmer's editors for the Mac — Timothy Hunter <cyclists@...>

Just got a new Powerbook, so I'm looking for suggestions for a good

43 messages 2005/02/14

[#130975] Is this old style Ruby? — centrepins@...

In Why's guide, I see the line:

30 messages 2005/02/15
[#130980] Re: Is this old style Ruby? — Jeremy Tregunna <jtregunna@...> 2005/02/15

[#130982] Re: Is this old style Ruby? — Nikolai Weibull <mailing-lists.ruby-talk@...> 2005/02/15

* Jeremy Tregunna (Feb 15, 2005 15:10):

[#130986] Re: Is this old style Ruby? — centrepins@... 2005/02/15

Page 349 of the (printed) pickaxe2 mentions '::' and '.', but doesn't

[#130988] Re: Is this old style Ruby? — "David A. Black" <dblack@...> 2005/02/15

Hi --

[#131103] Wee web-framework. It's great! — Joao Pedrosa <joaopedrosa@...>

Hi,

21 messages 2005/02/16
[#131111] Re: Wee web-framework. It's great! — "Vincent Foley" <vfoley@...> 2005/02/16

You know, I think Wee could become really hot if someone could mix it

[#131127] adding a dynamic method handler? (long post) — Mark Hubbart <discordantus@...>

Hi,

12 messages 2005/02/16

[#131132] Ruby + end user applications — "martinus" <martin.ankerl@...>

Ruby definitely needs more cool, simple to use, end user applications.

16 messages 2005/02/16

[#131168] FileSystem 0.1.0: Beta for me, Alpha for you — Francis Hwang <sera@...>

Greetings!

23 messages 2005/02/16

[#131252] Where is Ruby headed etc. — centrepins@... (Glenn)

A few musings/questions/dribble from an excited newbie. And my first

21 messages 2005/02/16
[#131256] Re: Where is Ruby headed etc. — Ben Giddings <bg-rubytalk@...> 2005/02/16

Glenn wrote:

[#131283] Re: Where is Ruby headed etc. — Brian McCallister <brianm@...> 2005/02/17

[#131286] Re: Where is Ruby headed etc. — Yukihiro Matsumoto <matz@...> 2005/02/17

Hi,

[#131275] installed ruby on linux without su access — Eko Budi Setiyo <contact_us@...>

Hi all,

17 messages 2005/02/17

[#131284] Ruby Visual Identity Team — "John W. Long" <ng@...>

Recently I've seen a couple of people mention how much they would like

43 messages 2005/02/17
[#131288] Re: Ruby Visual Identity Team — James Britt <jamesUNDERBARb@...> 2005/02/17

John W. Long wrote:

[#131307] Re: Ruby Visual Identity Team — gabriele renzi <rff_rff@...> 2005/02/17

James Britt ha scritto:

[#131404] - E02 - Nitro, a Ruby Based WebFramework — Ilias Lazaridis <ilias@...>

50 messages 2005/02/17
[#131445] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Aredridel <aredridel@...> 2005/02/17

>

[#131490] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Luke Graham <spoooq@...> 2005/02/18

Wow, I actually predicted this post in another thread. Nitro vs ruby is clearly

[#131494] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Alexander Kellett <ruby-lists@...> 2005/02/18

not too sure to be honest.

[#131496] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Alexander Kellett <ruby-lists@...> 2005/02/18

i take this back i read some of the various

[#131506] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Bill Guindon <agorilla@...> 2005/02/18

On Fri, 18 Feb 2005 11:30:49 +0900, Alexander Kellett

[#131592] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Christian Neukirchen <chneukirchen@...> 2005/02/18

Bill Guindon <agorilla@gmail.com> writes:

[#131605] Re: [EVALUATION] - E02 - Nitro, a Ruby Based WebFramework — Ilias Lazaridis <ilias@...> 2005/02/18

Christian Neukirchen wrote:

[#131422] ICFP Contest Dates Are Set — James Edward Gray II <james@...>

It's pretty early yet, but a lot of coders need time to plan and gather

13 messages 2005/02/17

[#131469] Virtual Ruby Group — Zach Dennis <zdennis@...>

Ok, I have a question for fellow rubyists, rubyiers, etc... There seem

55 messages 2005/02/17
[#131906] Re: Virtual Ruby Group — Zach Dennis <zdennis@...> 2005/02/21

It looks like there are a few folks interested in the Virtual Ruby Group

[#131921] Re: Virtual Ruby Group — "Curt Hibbs" <curt@...> 2005/02/21

One more suggestion: you could make a FreeRIDE plugin out of jabber4r, and

[#131942] Re: Virtual Ruby Group — Tanner Burson <tanner.burson@...> 2005/02/21

On Mon, 21 Feb 2005 21:02:19 +0900, Curt Hibbs <curt@hibbs.com> wrote:

[#131946] Re: Virtual Ruby Group — Bill Guindon <agorilla@...> 2005/02/21

On Tue, 22 Feb 2005 00:41:36 +0900, Tanner Burson

[#132114] Re: Virtual Ruby Group — Zach Dennis <zdennis@...> 2005/02/23

Bill Guindon wrote:

[#131499] pulling my hair out, why won't Kernel.sleep(0) sleep? — Sam Roberts <sroberts@...>

Can anybody give me any hints as to what I should be looking for? What

17 messages 2005/02/18

[#131545] Require when Executed file is required by another file. — "Zev Blut" <rubyzbibd@...>

Hello,

11 messages 2005/02/18

[#131563] 1-800-THE-QUIZ (#20) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

12 messages 2005/02/18

[#131635] Rails presentation — Jamis Buck <jamis_buck@...>

So I gave a presentation on Rails to the Utah Java Users Group last

14 messages 2005/02/18

[#131685] FXIrb 0.14 - a Win32 GUI wrapper around IRB — Martin DeMello <martindemello@...>

- What?

19 messages 2005/02/18

[#131753] Array#join non string arguments — Simon Strandgaard <neoneye@...>

A proposal:

15 messages 2005/02/19

[#131808] destructive! operations — Navindra Umanee <navindra@...>

Hi,

58 messages 2005/02/20
[#131847] Re: destructive! operations — "Robert Klemme" <bob.news@...> 2005/02/20

[#131852] Re: destructive! operations — Caio Tiago Oliveira <caiot1@...> 2005/02/20

Robert Klemme, 20/2/2005 12:04:

[#131859] Re: destructive! operations — James Edward Gray II <james@...> 2005/02/20

On Feb 20, 2005, at 10:23 AM, Caio Tiago Oliveira wrote:

[#131880] Re: destructive! operations — Navindra Umanee <navindra@...> 2005/02/20

James Edward Gray II <james@grayproductions.net> wrote:

[#131929] Re: destructive! operations — Austin Ziegler <halostatue@...> 2005/02/21

On Mon, 21 Feb 2005 06:07:58 +0900, Navindra Umanee

[#131939] Re: destructive! operations — "Bill Kelly" <billk@...> 2005/02/21

From: "Christian Neukirchen" <chneukirchen@gmail.com>

[#131943] Re: destructive! operations — Christian Neukirchen <chneukirchen@...> 2005/02/21

"Bill Kelly" <billk@cts.com> writes:

[#131958] Re: destructive! operations — Pit Capitain <pit@...> 2005/02/21

Christian Neukirchen schrieb:

[#131964] Re: destructive! operations — Christian Neukirchen <chneukirchen@...> 2005/02/21

Pit Capitain <pit@capitain.de> writes:

[#131969] Re: destructive! operations — Pit Capitain <pit@...> 2005/02/21

Christian Neukirchen schrieb:

[#131973] Re: destructive! operations — Christian Neukirchen <chneukirchen@...> 2005/02/21

Pit Capitain <pit@capitain.de> writes:

[#131985] Re: destructive! operations — "ES" <ruby-ml@...> 2005/02/21

On Mon, February 21, 2005 6:07 pm, Christian Neukirchen said:

[#131988] Re: destructive! operations — Pit Capitain <pit@...> 2005/02/21

ES schrieb:

[#131940] ANN: 2005 International Obfuscated Ruby Code Contest (IORCC) — Todd Nathan <iorcc@...>

Dear Fellow Rubists,

39 messages 2005/02/21
[#132095] Re: ANN: 2005 International Obfuscated Ruby Code Contest (IORCC) — "Josef 'Jupp' Schugt" <jupp@...> 2005/02/22

Todd Nathan wrote:

[#132102] Re: ANN: 2005 International Obfuscated Ruby Code Contest (IORCC) — Yukihiro Matsumoto <matz@...> 2005/02/22

Hi,

[#132105] Re: ANN: 2005 International Obfuscated Ruby Code Contest (IORCC) — "David A. Black" <dblack@...> 2005/02/22

Hi --

[#132107] Re: ANN: 2005 International Obfuscated Ruby Code Contest (IORCC) — Bill Guindon <agorilla@...> 2005/02/22

On Wed, 23 Feb 2005 08:23:08 +0900, David A. Black <dblack@wobblini.net> wrote:

[#132036] Proposal for nil, 0, and "" in an if statement — Dan Fitzpatrick <dan@...>

The following was derived from a portion of the destrutive! operations

38 messages 2005/02/22
[#132041] Re: Proposal for nil, 0, and "" in an if statement — David Heinemeier Hansson <david@...> 2005/02/22

> Here is a proposal for evaluating "", 0, and nil in an if statement:

[#132046] Re: Proposal for nil, 0, and "" in an if statement — Pit Capitain <pit@...> 2005/02/22

David Heinemeier Hansson schrieb:

[#132047] Re: Proposal for nil, 0, and "" in an if statement — Gavin Kistner <gavin@...> 2005/02/22

On Feb 22, 2005, at 6:41 AM, Pit Capitain wrote:

[#132053] Re: Proposal for nil, 0, and "" in an if statement — Gavin Kistner <gavin@...> 2005/02/22

On Feb 22, 2005, at 6:47 AM, Gavin Kistner wrote:

[#132054] Re: Proposal for nil, 0, and "" in an if statement — "David A. Black" <dblack@...> 2005/02/22

Hi --

[#132156] surprising: class A; end; A === A ==> false — Sam Roberts <sroberts@...>

I'm used to thinking of === being MORE useful

10 messages 2005/02/23

[#132186] Lighting the candles on the cake? — James Britt <jamesUNDERBARb@...>

Don't want to eat birthday cake too soon, but I know that someplace it's

12 messages 2005/02/24

[#132246] Simple HTML Renderer / Browser? — Randy Kramer <rhkramer@...>

I need a simple HTML renderer (to get started--eventually, I want to be able

18 messages 2005/02/24

[#132257] ruby-talk.com Expired? — James Edward Gray II <james@...>

I use http://ruby-talk.com/# style links on the Ruby Quiz site and I

13 messages 2005/02/24

[#132373] Ajax: A New Approach to Web Applications — "Curt Hibbs" <curt@...>

I always have trouble remembering whether its HttpXmlRequest, or

37 messages 2005/02/25
[#132379] Re: [OT] Ajax: A New Approach to Web Applications — "James G. Britt " <ruby.talk.list@...> 2005/02/25

On Sat, 26 Feb 2005 06:45:34 +0900, Curt Hibbs <curt@hibbs.com> wrote:

[#132382] Re: [OT] Ajax: A New Approach to Web Applications — "Curt Hibbs" <curt@...> 2005/02/25

James G. Britt wrote:

[#132375] Re: [OT] Ajax: A New Approach to Web Applications — PA <petite.abeille@...> 2005/02/25

[#132455] RubyGems 0.8.5 — Jim Weirich <jim@...>

= Announce: RubyGems Release 0.8.5

23 messages 2005/02/27
[#132525] RubyGems 0.8.6 (was Re: [ANN] RubyGems 0.8.5) — Chad Fowler <chadfowler@...> 2005/02/27

On Sun, 27 Feb 2005 10:34:34 +0900, Jim Weirich <jim@weirichhouse.org> wrote:

[#132500] Parsers vs. Homemade "Parsing" via REs — Randy Kramer <rhkramer@...>

I have the need to translate several megabytes of TWiki marked up text to

10 messages 2005/02/27

[SUMMARY] To Excel (#17)

From: James Edward Gray II <james@...>
Date: 2005-02-03 14:20:35 UTC
List: ruby-talk #129494
Probably the first question to ask when looking at this quiz is, what 
makes this
report so unfriendly, not just to Excel, but to work with in general?

1. There's a lot of junk we don't need.  Headers, footers, dashed 
lines.  All
that needs to go, so we can focus on the data.

2. The data itself isn't pure.  Have a look at these two fragments:

	50,589     358 %%%%  56,652     430 %%%%
	924,553 704,028   31  1,612K  1,226K

Those aren't numbers in there.  Yuck.

3. This report is ALMOST a fixed width file, which would help a lot, 
but it
fails in a few areas:

	TEE_X_101 26-Mar-2002 15:26                        1: GE
	
	
	                                         ---------------
	                                         Current  LastYr
	Part Code       Description               Period  Period
	--------------- ------------------------ ------- -------
	  Salesperson  00 NOBODY
	    Customer  1036 COMPANY 501
	      SA Sort Code  1.43 WATER DOLLS
	78-143FS        17/8# SS MODEL                10       0
	                                         ------- -------
	      SA Sort Code subtotals                  10       0
	
	      SA Sort Code  3.3 REMOTE CONTROL CARS
	74270           Model 35357-DBL                0       0
	921137-73       LARGE 19 X 18 X 14            30       0
	                                         ------- -------
	      SA Sort Code subtotals                  30       0
	                                         ------- -------
	    Customer subtotals                        40       0
	
	    Customer  14457 COMPANY 518
	      SA Sort Code  11.5 KITCHEN SETS
	943437          19/8# SS MODEL                 0       0
	                                         ------- -------
	      SA Sort Code subtotals                   0       0
	                                         ------- -------
	    Customer subtotals                         0       0
	
	    Customer  1824 COMPANY 529
	      SA Sort Code  19.4 SLIDES
	8394            2.5 OZ                         0      20
	8341            .21 SIZE PLASTIC, NO BATT      0      10
	18363           .29 SIZE PLASTIC, NO BATT      0      24
	                                         ------- -------
	      SA Sort Code subtotals                   0      54
	                                         ------- -------
	    Customer subtotals                         0      54

Use the dashed lines as a guide and you can see how the sub-headers
(Salesperson, Customer, and SA Sort Code) don't fit into columns.  
Subtotal
lines have the same problem.  Also notice that the Description content 
is
allowed to overflow it's column by one character.  That's a mess.

4. This one is less obvious, but equally real.  The data isn't very 
useful in
this format.  Christian Neukirchen did a nice job of recognizing this 
and taking
steps to correct it.

Now that we've identified the issues, let's work through them.  When I 
began
playing with a foreign report like this, I do just that:  Play around a 
bit.  My
first script may not end up being the one I keep, but I need to get 
familiar
with the data.  I'll show you what works for me, step by step.

Whenever I think, "I need to translate this into..." I mentally switch 
that to:

	while line = ARGF.gets  # traditional Unix filter
	
		print line
	end

It may not be much, but it's a start.  Now, let's tackle problem number 
1 and
jettison the junk.  The majority of it is those silly page headers.  
Those
should be easy enough to drop.  We stop printing when we enter a header 
and
start up again when we leave.

I think in patterns, so I would then start looking for a way to spot 
that I'm
entering a header.  I'm leery to anchor against arbitrary text, if I 
don't have
too, so I would like to find something better.  If you're familiar with 
these
page print style reports, you might have a good guess of what comes 
before that
header.  Even if you're not, it pays to look at a foreign document with 
the
"invisible characters" turned on, if your editor can do that.  Here's 
what a
header really looks like:

	      SA Sort Code subtotals                  20       0
	
	\f  <-- Look what's hiding here!  A form-feed character.
	TEE_X_101 26-Mar-2002 15:26                        1: GE
	
	
	                                         ---------------
	                                         Current  LastYr
	Part Code       Description               Period  Period
	--------------- ------------------------ ------- -------
	      SA Sort Code  5.207 BUILDING BLOCKS

That makes spotting the headers easy.  The very first one doesn't have 
the
form-feed, but that's not hard to work around.

Once we're in a header, the last line is just a solid line of dashes 
and spaces.
  Just be careful to distinguish it from the other dashed line in the 
header and
you can build a solution:

	header = true  # start in header
	while line = ARGF.gets
		if header  # we're inside the header
			header = false if line =~ /^-[- ]+-$/  # watch for the end
		else  # we're not in the header
			if line =~ /\f/  # watch for header beginning
				header = true
				next
			end
			
			print line
		end
	end

If you run that on the report, you'll see that we did indeed remove all 
the page
headers.  I showed (and even submitted) that version because it's easy 
to break
down and understand, but if all that code bothers you, we can shorten 
it up:

	while line = ARGF.gets
		# the next line skips all headers
		next if ($. == 1 or line =~ /\f/) .. line =~ /^-[- ]+-$/
			
		print line
	end

That does exactly the same thing, making use of Ruby's versatile 
Ranges.  The
range acts as a toggle here.  When the first condition becomes true, 
the Range
will evaluate to true (skipping lines with next()) until the second 
condition
becomes true.  Then the process begins again.  My first condition 
searches for
line one of the report or a form-feed character.  The second condition 
looks for
the solid line of dashes.  Again, the code works the same, so you can 
use
whatever you are comfortable with.

We're not done dropping junk yet!  Let's toss out dashed lines and the 
report
footer.  Both are trivial:

	while line = ARGF.gets
		next if ($. == 1 or line =~ /\f/) .. line =~ /^-[- ]+-$/
		next if line =~ /--$/  # skip dashed lines
			
		print line
	
		break if line =~ /^Report Totals/  # stop with "Report Totals"
	end

What's the report look like now?

	  Salesperson  00 NOBODY
	    Customer  1036 COMPANY 501
	      SA Sort Code  1.43 WATER DOLLS
	78-143FS        17/8# SS MODEL                10       0
	      SA Sort Code subtotals                  10       0
	
	      SA Sort Code  3.3 REMOTE CONTROL CARS
	74270           Model 35357-DBL                0       0
	921137-73       LARGE 19 X 18 X 14            30       0
	      SA Sort Code subtotals                  30       0
	    Customer subtotals                        40       0
	
	    Customer  14457 COMPANY 518
	      SA Sort Code  11.5 KITCHEN SETS
	943437          19/8# SS MODEL                 0       0
	      SA Sort Code subtotals                   0       0
	    Customer subtotals                         0       0

We're making progress.  It's almost readable.

There are four types of lines left in this report that we need to deal 
with.
Yes, I'm sure it's four and not three.  Sub-headers, product sales, 
subtotals
and blank lines.  At this point, I would try to build selectors to 
handle each
of them:

	while line = ARGF.gets
		next if ($. == 1 or line =~ /\f/) .. line =~ /^-[- ]+-$/
		next if line =~ /--$/
		
		# handle blank lines...
		if line !~ /\S/
			print "  BLANK:  ", line
		
		# handle subtotals
		elsif line =~ /^.+?totals(?:\s+(?:-?[\d,]+K?|%+)){12}\s*$/i
			print "  TOTAL:  ", line
		
		# hande product sales
		elsif line =~ /^\S/
			print "PRODUCT:  ", line
		
		# handle subheaders
		else
			print " HEADER:  ", line
		end
	
		break if line =~ /^Report Totals/
	end

Uh oh, scary Regexp in there.  Let's break it down:

	^ # the beginning of the line
	    .+?    # skip some of the beginning looking for...
	    totals # the word totals (to match subtotals or Report Totals with 
/i)
	    (?: # grouping
	        \s+ # some whitespace
	        (?: # start group
	            -?     # an optional minus
	            [\d,]+ # a comma separated digit sequence
	            K?     # an optional trailing K
	            |      # or ...
	            %+     # a run of % signs
	        ) # end group
	    ){12} # end group -- find exactly 12 of those
	    \s*   # optional trailing whitespace
	$ # the end of the line

In short, it's just looking for the word "totals" followed by 12 things 
that
could be numbers in this report.  You really don't even need an 
expression that
complex, in this case, but since the headers can hold arbitrary text 
(company
names) I want to make sure I'm matching what I'm looking for.  Ruby 
will even
let you drop that commented Regexp in your code with /x if you like.

Notice that I'm being careful to use generic patterns.  For example, I 
never
match Salesperson, Company or SA Sort Code.  What if the company 
happens to have
another report that includes Brokers?  (Trick question.  I know it to 
be true in
this case!)  These patterns will treat that like any other sub-header 
and just
work as expected.

So does that successfully locate everything?

	 HEADER:    Salesperson  00 NOBODY
	 HEADER:      Customer  1036 COMPANY 501
	 HEADER:        SA Sort Code  1.43 WATER DOLLS
	PRODUCT:  78-143FS        17/8# SS MODEL                10       0
	  TOTAL:        SA Sort Code subtotals                  10       0
	  BLANK:
	 HEADER:        SA Sort Code  3.3 REMOTE CONTROL CARS
	PRODUCT:  74270           Model 35357-DBL                0       0
	PRODUCT:  921137-73       LARGE 19 X 18 X 14            30       0
	  TOTAL:        SA Sort Code subtotals                  30       0
	  TOTAL:      Customer subtotals                        40       0
	  BLANK:
	 HEADER:      Customer  14457 COMPANY 518
	 HEADER:        SA Sort Code  11.5 KITCHEN SETS
	PRODUCT:  943437          19/8# SS MODEL                 0       0
	  TOTAL:        SA Sort Code subtotals                   0       0
	  TOTAL:      Customer subtotals                         0       0

Sure does.  Now it's easy to just transform that data into CSV, which 
will fix
our not-quite-fixed-width-columns problem:

	require "csv"
	
	while line = ARGF.gets
		next if ($. == 1 or line =~ /\f/) .. line =~ /^-[- ]+-$/
		next if line =~ /--$/
		
		if line !~ /\S/
			puts CSV.generate_line([""])
	
		elsif line =~ /^(.+?totals)((?:\s+(?:-?[\d,]+K?|%+)){12})\s*$/i
			puts CSV.generate_line(["", $1.lstrip, *$2.split(" ")])
	
		elsif line =~ /^(\S+)\s+(.+?)((?:\s+(?:-?[\d,]+K?|%+)){12})\s*$/
			puts CSV.generate_line([$1, $2, *$3.split(" ")])
	
		else
			puts CSV.generate_line(["", line.strip])
		end
	
		break if line =~ /^Report Totals/
	end

I snuck another nasty Regexp in there didn't I?  Actually, if you look 
closely,
you'll see that it's nearly identical to the other one, save that it 
also
catches product descriptions.  It's just there to help me locate all 
the parts
of the line.  After capturing the parts, I use split() to break them 
up, strip()
to clean them, and let Ruby's CSV handle the rest.

If you open the CSV output from this in Excel, you'll see that I've 
just shifted
sub-headers and subtotals into the second column.  That pretty much 
maintains
the familiar report format, while eliminating the column breakup issues.

That's really a lot of the clean up work done already.  The nagging 
problem is
that Excel doesn't consider 1,612K or %%%% numbers.  We can fix the 
first one
easy enough, but what the heck is causing the %%%%s?

More detective work is needed.

Those %%%% entries only happen in the small "Pct Var" column, which is 
four
characters wide.  "Var" huh?  Variance maybe?  If you look around a 
bit, the
formula is easy to calculate from a row like this:

	                                         Current  LastYr  Pct
	Part Code       Description               Period  Period  Var
	--------------- ------------------------ ------- ------- ----
	
	613433          .22 SIZE PLASTIC, NO BATT     65       1 6400

That looks like (65 - 1) * 100.  That doesn't make much sense though, 
because
we're probably talking about a percentage.  More likely is (65 - 1) / 1 
* 100.
You can test that on other rows to prove that it is indeed correct.

Okay, so why are we getting %%%%s?

	Current  LastYr  Pct
	    YTD     YTD  Var
	------- ------- ----
	
	    125       1 %%%%

(125 - 1) / 1 * 100 = 12400.  That's five characters and we're only 
allowed
four.  It's a column overflow problem.  Our CSV approach has no such 
limitation,
so we can recalculate those numbers and add them to the output.

Here's a routine to clean up the numbers:

	def clean( numbers )
		# turn them back into numbers...
		numbers.map! do |n|
			n.gsub!(",", "")  # drop commas
			if n.sub!(/K$/, "")  # when there's a K...
				n.to_i * 1000    # multiple by 1,000
			elsif n !~ /%/
				n.to_i           # numify
			else
				n
			end
		end
		
		# recalculate %%%% columns...
		numbers.each_with_index do |n, i|
			if n.to_s =~ /%/
				numbers[i] = ( (numbers[i - 2] - numbers[i - 1]) /
							   numbers[i - 1].to_f * 100 ).to_i
			end
		end
		
		numbers  # return results
	end

To use that, we just call it twice:

	while line = ARGF.gets
		next if ($. == 1 or line =~ /\f/) .. line =~ /^-[- ]+-$/
		next if line =~ /--$/
		
		if line !~ /\S/
			puts CSV.generate_line([""])
	
		elsif line =~ /^(.+?totals)((?:\s+(?:-?[\d,]+K?|%+)){12})\s*$/i
			# first call...
			puts CSV.generate_line(["", $1.lstrip, *clean($2.split(" "))])
	
		elsif line =~ /^(\S+)\s+(.+?)((?:\s+(?:-?[\d,]+K?|%+)){12})\s*$/
			# second call...
			puts CSV.generate_line([$1, $2, *clean($3.split(" "))])
	
		else
			puts CSV.generate_line(["", line.strip])
		end
	
		break if line =~ /^Report Totals/
	end

The rest of my solution (not shown) was boring header parsing, to print 
out the
column labels and the report "Period".  You can follow the link in the 
sidebar
if you want to examine that.

At this point, we've solved problems 1, 2 and 3 from the beginning of 
this
summary.  I want to talk a little about problem 4, then I promise to 
end this
ridiculously long message.

Christian Neukirchen's short solution (not shown) does away with 
sub-header and
subtotal lines.  That filter tacks on the Salesperson, Customer and SA 
Sort Code
to each product entry.  This makes all the needed information available 
on every
line.  This is a big win for using Excel's filters, making the report a 
lot
easier to examine and change.

When I did this project for work, I did the same thing.  However, I put 
the
metadata at the back of the line and left in the sub-headers, subtotals 
and
blanks.  I also added a column to identify each type of line:  Header, 
total,
data or blank.  This gave me all the same benefits as Christian's code 
has,
while keeping the familiar format.  I could filter down to the "data" 
lines to
have nearly identical results.  This feature turned out to be a big hit,
drastically increasing company productivity.

Sorry for sending in a quiz that "looked too much like real work".  I 
promise,
we're back to fun and games tomorrow...


In This Thread

Prev Next