[#397988] Help with sqlite3 please — Kaye Ng <lists@...>

I'm on Windows 7 Ultimate, 64-bit

18 messages 2012/08/03
[#397989] Re: Help with sqlite3 please — Chris Hulan <chris.hulan@...> 2012/08/03

sqlite is not ruby, so you should look for a sqlite group ;)

[#397990] Re: Help with sqlite3 please — Kaye Ng <lists@...> 2012/08/03

> However it looks like you have 'SQL' at the beginning of your CREATE

[#398031] Gem install or usage problem in shared environment — Tom Moulton <lists@...>

I am moving to a Westhost shared CPanel account and I am trying to set

17 messages 2012/08/04
[#398077] Re: Gem install or usage problem in shared environment — Tom Moulton <lists@...> 2012/08/06

I got a solution from WestHost and it may help others:

[#398086] Re: Gem install or usage problem in shared environment — Ryan Davis <ryand-ruby@...> 2012/08/07

[#398088] Re: Gem install or usage problem in shared environment — Tom Moulton <lists@...> 2012/08/07

Ryan Davis wrote in post #1071503:

[#398043] Redefining constants for a given instance only — "Andrea Dallera" <andrea@...>

Hello,=0A=0A=C2=A0 =C2=A0 let's say we have two empty classes:=0A=0Aclass=

9 messages 2012/08/05

[#398063] Join with ActiveRecord using non-standard schema — Tedi Roca <lists@...>

Hi,

13 messages 2012/08/06

[#398135] Help with database-related code pls — Kaye Ng <lists@...>

Hi guys! This is just a part of the code of a program that can load a

12 messages 2012/08/08

[#398190] How do you order your class methods? — masta Blasta <lists@...>

Just getting some layout ideas from other fellow devs.

11 messages 2012/08/10

[#398245] namespace instance methods? — John Doe <lists@...>

I have a large class with many instance methods that I want to

14 messages 2012/08/13

[#398287] Idea: def ... end returns the symbolized version of the newly-defined method, instead of nil — Peter <lumbergh@...>

This would allow useful syntax constructs such as this:

9 messages 2012/08/13

[#398362] case vs if-else — ajay paswan <lists@...>

Which one is faster?

20 messages 2012/08/16

[#398385] A Ruby class is never closed — Rubyist Rohit <lists@...>

Is it true that a Ruby class definition is never closed? Even after

18 messages 2012/08/16

[#398504] How to create an EXecutable file (Linux) — Fosiul Alam <lists@...>

Hi

13 messages 2012/08/22

[#398506] Save a file by clicking on a link — ajay paswan <lists@...>

I clicked a link to download a file using ruby, now I see the open-save

41 messages 2012/08/22

[#398641] force child threads run paralelly? — ajay paswan <lists@...>

I have created two child thread using main thread- child1 and child2.

19 messages 2012/08/28
[#398644] Re: force child threads run paralelly? — ajay paswan <lists@...> 2012/08/28

Ruby version:

[#398648] Re: force child threads run paralelly? — Tony Arcieri <tony.arcieri@...> 2012/08/28

On Tue, Aug 28, 2012 at 7:19 AM, ajay paswan <lists@ruby-forum.com> wrote:

[#398684] Can I do this with Ruby and sqlite alone? — Kaye Ng <lists@...>

Hi guys.

16 messages 2012/08/29

Re: Having difficulty processing text files - some techniques?

From: Jes俍 Gabriel y Gal疣 <jgabrielygalan@...>
Date: 2012-08-03 09:02:23 UTC
List: ruby-talk #397975
On Fri, Aug 3, 2012 at 10:39 AM, b1_ __ <lists@ruby-forum.com> wrote:
> I am trying to extract information from a po-ker hand history text file
> as an exercise in learning RegExp and ruby file manipulation classes IO
> and File.
>
> The way the hand history text file is set out is like so:
>
> Hand No. xxxx - Date xxxx Time xxxx
> Game type: xxxx Blinds level: xxxx
> Table type: xxx
> Player 1: xxxx (chip count)
> Player 2: xxxx (chip count)
> Player 3: xxxx (chip count)
> Player 4: xxxx (chip count)
> Hole Cards Phase
> Player 1 calls
> Player 2 raise
> Player 3 folds
> Flop Phase
> Player 1 raises
> Player 2 calls
> Turn Phase
> etc
> etc
> River Phase
> etc
> etc
> Player 2 wins
>
>
>
> In my testing I have extracted successfully the very simple statistic of
> VP$IP, which is the percentage of times a player Voluntarily Puts $ In
> Pot pre-flop. So this is:
>
> Number of time called or raise pre-flop / Number of hands at the table
>
> My code (I used what I think is a Finite State Machine?):
>
> File.open("test_read.txt") do |f|
>
>   count = 0
>   state = nil
>
>   while (line = f.gets)
>     case (state)
>     when nil
>       # Look for the words "Hole Cards" and if found turn on text
> processing
>       if (line.match(/Hole Cards/))
>         state = :parsing
>       end
>     when :parsing
>       # Look for word "Flop" or "wins" and if found stop processing text
>       if (line.match(/Flop/)) || (line.match(/wins/))
>         state = nil
>       else
>         if (line.match(/#{name} calls/)) || (line.match(/#{name}
> raises/)) then count += 1 end
>       end
>     end
>   end
>
>   return count
>
> end
>
> This code processes text only when inside the Hole Card phase (pre-flop
> phase) between lines with words "Hole Cards" (start text processing) and
> "Flop" or "wins" (stop processing text). It increments a counter if it
> finds the words "calls" and "raises" next to a player's name. This code
> ran through the whole file, maybe over hundreds of hands, and extracted
> the data.
>
> The problem I am having is that I need to have the extracted data
> associate with hand data. Hand data might be the date of the hand was
> played, the number of players in the hand, the blind level. This means I
> need isolate each hand, extract the hand data and put it in a hash for
> example, then extract stats like VP$IP for each player (a hand-by-hand
> approach rather than a file-wide approach). So the output might go into
> a text file specific to each player that would look like:
>
> Player 1
>     VP$IP   2P  3P  4P  All  HandsAtTables
> 2012-07-23    3  201  21  225  534
> 2012-07-24    45  10  3  58  1001
> 2012-07-25     5  5  5  15  420
>
> Can I do this without storing data in arrays or objects? I've been
> thinking I can use another Finite State Machine, only look for the words
> "Hand" (start of hand) and "wins" (end of hand), the problem is I need
> some of the data on the line that has the word "Hand" on it, something I
> can't do with my code above. I also need to switch between hands when
> there are no lines between the word "wins" and the next line which will
> have the word "Hands" on it indicating the start of the next hand.

I don't understand the part about not using arrays or objects. If you
need to accumulate stuff while processing that's the only way.
It seems that you want to keep separate counts by date and number of
players. So I would use a hash whose key is a composite of both values
(a struct with both fields for example), or maybe a hash of hashes.

When you find the "Hand" line, you parse the date and the following
lines to find out the number of players. With this you get the key to
the hash. The value will be the count. Then you keep your current
logic of being before the flop and counting. When you find another
Hand, you first write the count to the hash with the current key, then
recompute the next key based on the Hand line and number of players.
Something like:


Key = Struct.new :date, :number_of_players
state = nil
current_key = nil
results = Hash.new(0) # keys will return a value of 0 when they don't exist
while (line = f.gets)
    case (state)
    when nil
      if(line.match(/^Hand/)
        #find the date and the number of players in subsequent lines
        key = Key.new date,number_of_players
        state = :hand_found
      end
   when :hand_found
      # Look for the words "Hole Cards" and if found turn on text
processing
      if (line.match(/Hole Cards/))
        state = :parsing
      end
    when :parsing
      # Look for word "Flop" or "wins" and if found stop processing
text, and store the current value
      if (line.match(/Flop/)) || (line.match(/wins/))
        results[key] += count
        state = nil
      else
        if (line.match(/#{name} calls/)) || (line.match(/#{name}
raises/)) then count += 1 end
      end
    end
  end
end

p results

This is untested, but might give you an idea.

Jesus.

In This Thread