[#393742] Getting the class of an object. — Ralph Shnelvar <ralphs@...32.com>

Consider;

14 messages 2012/03/06

[#393815] arcadia IDE requires tcl/tk and ruby-tk — Thufir Hawat <hawat.thufir@...>

which or where tcl and tk does arcadia require? Is this a gem which I

13 messages 2012/03/13

[#393952] What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...>

Hi!

18 messages 2012/03/21
[#393953] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Active Support has recently added qualified_const_* methods to Module

[#393954] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Ah, that won't work in 1.8.

[#393959] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 16:43, Xavier Noria <fxn@hashref.com> wrote:

[#393960] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 8:17 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393961] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 20:48, Xavier Noria <fxn@hashref.com> wrote:

[#393962] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 9:51 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393967] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/22

On Wed, Mar 21, 2012 at 22:11, Xavier Noria <fxn@hashref.com> wrote:

[#393969] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/22

On Thu, Mar 22, 2012 at 6:15 AM, Nikolai Weibull <now@bitwi.se> wrote:

[#394154] uninitialized constant SOCKSSocket — Resident Moron <lists@...>

I am running ruby 1.9.3 on a linux box. I would like to use

10 messages 2012/03/29

[#394160] Why z = Complex(1,2) rather than z = Complex.new(1,2)? — Ori Ben-Dor <lists@...>

What's this syntax, z = Complex(1,2), as opposed to z =

14 messages 2012/03/29

[#394175] shoes no such file to load -- rubygems — Mr theperson <lists@...>

I have installed shoes to develop GUI applications but when I try and

13 messages 2012/03/29

[#394201] Can't open url with a subdomain with an underscore — Jeroen van Ingen <lists@...>

I try to open the following URL: http://auto_diversen.marktplaza.nl/

10 messages 2012/03/30

[#394222] Ruby openssl ECC help plz — no name <lists@...>

I am confused on how to properly export public ECC key. I can see it

13 messages 2012/03/31

Re: Reading particular text from a txt file

From: Robert Klemme <shortcutter@...>
Date: 2012-03-06 09:27:38 UTC
List: ruby-talk #393733
Eric C. wrote in post #1050315:
> This is the code you want:
>
> str = File.open("status.txt") { |f| f.read }
> m = /^CRP\+TYH\+(\d+)/.match(str)
> puts m[1]

That code has several issues:

1. It will break (throw an exception) if the string is not found in the
file because it does
not check whether m is non nil.
2. File.read() is a much simpler way to read the whole file at once than
File.open(...){|f| f.read}.
3. It is inefficient because it reads in the whole file just to extract
a portion of the file.
4. Even worse, it will break for large files.
5. It does more IO than necessary because it always reads the whole
file.
6. Logic is not encapsulated in a method which hinders reuse.

Compare that to my solution:

def r(f)
  File.foreach f do |line|
    match = line[/^CRP\+TYH\+(\d+)/, 1] and return match
  end

  nil
end

The file is processed line by line (but still IO uses buffering
underneath for efficiency).  Reading is stopped as soon as the data is
found.  It won't break for large files.

We can even generalize the approach

def find_first_in_file(file, regexp, group = 1)
  File.foreach file do |line|
    match = regexp.match(line) and return match[group] || match[0]
  end

  nil
end

This will return the first match and if the regexp has a capturing group
it will return the capture of the first group.  We would use it like
this

data = find_first_file("myfile.txt", /^CRP\+TYH\+(\d+)/)

Kind regards

robert

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

In This Thread

Prev Next