2007/7/9, Marc Hoeppner <marc.hoeppner / molbio.su.se>:
> Hi everyone,
>
> I expect this is a rather trivial problem, but I just started using ruby
> and am a bit stuck right now.
> Here is what I want to do:
>
> I have a text file, that contains information in the following format:
>
> KOG0003
>     At2g36170
>     At3g52590
>     CE15495
>     7295730
> KOG0004
>     Hs20476120
>     YIL148w
>     YKR094c
>     SPAC11G7.04
>
> Now, this has to go into a relational database. But right now this is
> not really a table. The desired output would look something like this:
>
> KOG0003 At2g36170
> KOG0003 At3g52590
> KOG0003 CE15495
> KOG0003 7295730
> KOG0004 Hs20476120
> KOG0004 YIL148w
> KOG0004 YKR094c
>
> Well, you get the picture. What I tried to do is to read the text file,
> than look for lines that start with a blank and replace that blank with
> the first word of the previous line, given that this line does in fact
> starts with a word (could also be selected by using KOG[0-9]*). I
> thought of storing the KOG[0-9] in a variable, but overall I cant make
> it work and have no real idea how to solve this. Any help would be
> greatly appreciated. Guess for an experienced user this is a three-liner

Hm...  Maybe something like this:

key = nil
ARGF.each do |line|
  line.chomp!
  case line
    when /^(\S+)/
      key = line.strip
    when /^\s+(\S+)/
      print key, " ", $1, "\n" if key
    else
       # ignore
  end
end

Kind regards

robert