Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Counting Tabs and splitting by that number

Reply
Thread Tools

Counting Tabs and splitting by that number

 
 
Nick Bo
Guest
Posts: n/a
 
      09-28-2008
Basically i have a document which I am opening and then i am reading
each line of the file and having to split it up into two arrays and then
into a hash in which i have to get some sort of output like this:

application/activemessage has no extensions
application/andrew-inset has extensions ez
application/applefile has no extensions
application/atom has extensions atom
application/atomcat+xml has extensions atomcat
application/atomicmail has no extensions
application/atomserv+xml has extensions atomsrv
application/batch-SMTP has no extensions
application/beep+xml has no extensions
application/cals-1840 has no extensions

I have determined that if there are no tabs in the document then the
file has no extension so what i did was an if statement in the beginning
to see if the line contained the tab if not then it would save false to
the position in the array that i was at in the each loop.

file.each_line do |line|
next if line[0] == ?#
next if line == "\n"
string = line
if string.include?("\t") == false
mimeValue[i] = false
mimeKey[i]=string.split
else

#THIS IS WHERE MY ISSUE IS NOW
mimeKey[i], mimeValue[i] = string.split("\t\t\t")
end

My problem now that sometimes teh document is split by tabs changing in
number one line may have 3 tabs other may have 5 and one might just have
just 1. So I am in a rut now How do i determine how many tabs are in
the line(string variable) thus so i can split the two parts into their
appropriate arrays. I was thinking I could do some kind of recurssion
which would test to see if tab and if so then add 1 to count and then be
able to do something like

mimeKey[i], mimeValue[i] = string.split(#{tabCount}*("\t"))

I know there is alot in my message so here is a summary:

HOW TO COUNT \t IN A STRING THEN SPLIT BY THAT NUMBER OF \t
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Siep Korteling
Guest
Posts: n/a
 
      09-28-2008
Nick Bo wrote:
> Basically i have a document which I am opening and then i am reading

(...)
>
> I know there is alot in my message so here is a summary:
>
> HOW TO COUNT \t IN A STRING THEN SPLIT BY THAT NUMBER OF \t


Split on \t anyway and dump all empty results, like this:

str = 'beep+xml\t\t\t atom'
res = str.split('\t').reject{|item|item.empty?}
p res

hth,

Siep
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
brabuhr@gmail.com
Guest
Posts: n/a
 
      09-28-2008
On Sun, Sep 28, 2008 at 5:52 PM, Nick Bo <(E-Mail Removed)> wrote:
> #THIS IS WHERE MY ISSUE IS NOW
> mimeKey[i], mimeValue[i] = string.split("\t\t\t")
>
> My problem now that sometimes teh document is split by tabs changing in
> number one line may have 3 tabs other may have 5 and one might just have
> just 1.
>
> mimeKey[i], mimeValue[i] = string.split(#{tabCount}*("\t"))
>
> I know there is alot in my message so here is a summary:
>
> HOW TO COUNT \t IN A STRING THEN SPLIT BY THAT NUMBER OF \t


Your tabs are consecutive and you don't actually care how many there are?
string.split(/\t+/)
?

 
Reply With Quote
 
Nick Bo
Guest
Posts: n/a
 
      09-28-2008
incorrect if i do it that way then if i have 5 tabs in between the two
parts i want to separate then i get 4 blank arrays. giving me a total of
6 arrays.
eg = "abcdefg \t\t\t\t\t hi"
eg.split("\t) --> ["abcdefg ", "", "", "", " i"
eg.split("/\t+/) just gives me ["abcdefg \t\t\t\t\t i"] cause it dont
matche the pattern given to the split at all so it makes whole thing
part of the array.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Bill Kelly
Guest
Posts: n/a
 
      09-28-2008

From: "Nick Bo" <(E-Mail Removed)>
>
> eg = "abcdefg \t\t\t\t\t hi"
> eg.split("\t) --> ["abcdefg ", "", "", "", " i"
> eg.split("/\t+/) just gives me ["abcdefg \t\t\t\t\t i"] cause it dont
> matche the pattern given to the split at all so it makes whole thing
> part of the array.


Huh?

>> eg = "abcdefg \t\t\t\t\t hi"

=> "abcdefg \t\t\t\t\t hi"
>> eg.split(/\t+/)

=> ["abcdefg ", " hi"]


Regards,

Bill



 
Reply With Quote
 
Nick Bo
Guest
Posts: n/a
 
      09-28-2008
Bill Kelly wrote:
> From: "Nick Bo" <(E-Mail Removed)>
>>
>> eg = "abcdefg \t\t\t\t\t hi"
>> eg.split("\t) --> ["abcdefg ", "", "", "", " i"
>> eg.split("/\t+/) just gives me ["abcdefg \t\t\t\t\t i"] cause it dont
>> matche the pattern given to the split at all so it makes whole thing
>> part of the array.

>
> Huh?
>
>>> eg = "abcdefg \t\t\t\t\t hi"

> => "abcdefg \t\t\t\t\t hi"
>>> eg.split(/\t+/)

> => ["abcdefg ", " hi"]
>
>
> Regards,
>
> Bill


it wouldnt give me the two, i so wish it did but i found a way around it
this is my solution and it works perfect
eg = "abcdefg \t\t\t\t\t\t hi"
splitArray = eg.split("\t")
splitArray = splitArray.delete("")

loop
arrayKey[i] = splitArray[0]
arrayValue[i] = splitArray[1]

Thanks for everyones help
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mark Thomas
Guest
Posts: n/a
 
      09-29-2008

> it wouldnt give me the two, i so wish it did but i found a way around it
> this is my solution and it works perfect
> eg = "abcdefg \t\t\t\t\t\t hi"
> splitArray = eg.split("\t")
> splitArray = splitArray.delete("")


IMO, the regex solution is better

splitArray = eg.split(/\t+/)

I think you put it in quotes. Leave the quotes out.

-- Mark.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
problem in running a basic code in python 3.3.0 that includes HTML file Satabdi Mukherjee Python 1 04-04-2013 07:48 PM
Tabs -vs- Spaces: Tabs should have won. rantingrick Python 95 07-18-2011 11:07 PM
CSV::Writer... Using tabs instead of commas (or creating excel file using tabs to seperate data) John Kopanas Ruby 2 01-29-2007 06:26 PM
List text files showing LFs and expanded tabs (was: Colorize expanded tabs) qwweeeit Python 2 12-14-2005 10:07 AM
Counting Tabs, New lines, etc. ~error~ Matt C Programming 4 04-20-2005 03:07 AM



Advertisments