[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Way to split a string based on fixed length?

Wayne Molina

10/20/2008 2:35:00 PM

This is probably a newb question but I can't seem to figure it out. I
have a string I'm trying to parse, that is done via a fixed length
format - it needs to be split on every 8th character in order for me to
get a proper array list of it so I can do some additional operations on
it.

The string is something like this: '0000000N0000000N0000000N0000000N'
and I need it to be an array containing something like: ['0000000N',
'0000000N', '0000000N', '0000000N'].

Is there a ruby method I can use to split the single string into groups
of x number of characters, when there is no delimiter?
--
Posted via http://www.ruby-....

8 Answers

Jeremy Henty

10/20/2008 2:40:00 PM

0

On 2008-10-20, Wayne Molina <wayne@econoffice.com> wrote:

> Is there a ruby method I can use to split the single string into
> groups of x number of characters, when there is no delimiter?

irb(main):001:0> "abcdefghijklmnpqrstuvwxyz".scan /.{8}/
=> ["abcdefgh", "ijklmnpq", "rstuvwxy"]
irb(main):002:0>

Regards,

Jeremy Henty

James Gray

10/20/2008 2:40:00 PM

0

On Oct 20, 2008, at 9:34 AM, Wayne Molina wrote:

> This is probably a newb question but I can't seem to figure it out. I
> have a string I'm trying to parse, that is done via a fixed length
> format - it needs to be split on every 8th character in order for me
> to
> get a proper array list of it so I can do some additional operations
> on
> it.
>
> The string is something like this: '0000000N0000000N0000000N0000000N'
> and I need it to be an array containing something like: ['0000000N',
> '0000000N', '0000000N', '0000000N'].
>
> Is there a ruby method I can use to split the single string into
> groups
> of x number of characters, when there is no delimiter?

Sure, you can use a regular expression for this:

>> "0000000N0000000N0000000N0000000N".scan(/.{1,8}/m)
=> ["0000000N", "0000000N", "0000000N", "0000000N"]

James Edward Gray II



John Slobbe

10/20/2008 2:45:00 PM

0

You can use:

string.unpack "A8A8A4A2" # => ["0000000N", "0000000N", "0000", "00"]

Regards, John.

On 20/10/2008, Wayne Molina <wayne@econoffice.com> wrote:
> This is probably a newb question but I can't seem to figure it out. I
> have a string I'm trying to parse, that is done via a fixed length
> format - it needs to be split on every 8th character in order for me to
> get a proper array list of it so I can do some additional operations on
> it.
>
> The string is something like this: '0000000N0000000N0000000N0000000N'
> and I need it to be an array containing something like: ['0000000N',
> '0000000N', '0000000N', '0000000N'].
>
> Is there a ruby method I can use to split the single string into groups
> of x number of characters, when there is no delimiter?
> --
> Posted via http://www.ruby-....
>
>

Wayne Molina

10/20/2008 3:02:00 PM

0

Awesome! Thanks much!
--
Posted via http://www.ruby-....

Craig Demyanovich

10/20/2008 3:04:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

I thought String#split with a regex might do it, but I'm not sure why it
returns an array with empty strings in it. So I tried String#scan. It works,
but since we're grouping into runs of eight characters, it returns an array
of arrays of results. No problem, we can just use Array#flatten to take care
of that. Here's IRB output showing the approaches:

>> '0000000N0000000N0000000N0000000N'.split(/(\w{8})/)
=> ["", "0000000N", "", "0000000N", "", "0000000N", "", "0000000N"]
>> '0000000N0000000N0000000N0000000N'.scan(/(\w{8})/)
=> [["0000000N"], ["0000000N"], ["0000000N"], ["0000000N"]]
>> '0000000N0000000N0000000N0000000N'.scan(/(\w{8})/).flatten
=> ["0000000N", "0000000N", "0000000N", "0000000N"]

Regards,
Craig

Craig Demyanovich

10/20/2008 3:05:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

D'oh, GMail didn't update the conversation while I was replying. Anyway, you
have some good answers.

Craig

Chris Causer

10/20/2008 3:16:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Mon, Oct 20, 2008 at 4:04 PM, Craig Demyanovich
<cdemyanovich@gmail.com>wrote:

> I thought String#split with a regex might do it, but I'm not sure why it
> returns an array with empty strings in it.
> [snip]
> >> '0000000N0000000N0000000N0000000N'.split(/(\w{8})/)
> => ["", "0000000N", "", "0000000N", "", "0000000N", "", "0000000N"]


Going a bit off topic here, but I suspect the reason split adds empty
strings is because it is matching the 8 characters, splitting there, but
because you are capturing them, puts the delimiter back in the array it as
well. The gap between the 8 characters is nothing, thus "". I guess that if
you split(/\w{8}/) you'll get nothing because there will be nothing left
after removing the delimeter (unless the string isn't of length 8n, n is an
integer.)

Adam Penny

10/21/2008 8:07:00 AM

0

Craig Demyanovich wrote:
> I thought String#split with a regex might do it, but I'm not sure why it
> returns an array with empty strings in it. So I tried String#scan. It
> works,

Don't quote me on this, but I think that would be because String#split
had a regex to define the character/group of characters that you're
interested in, so if you're defining the split as any old 8 characters
then that doesn't leave an awful lot!
--
Posted via http://www.ruby-....