# Is it possible to eliminate the temporary variable

**URL:** <https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236>\
**Category:** Ruby\
**Created:** [September 27, 2009, 7:13pm UTC](https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236 "2009-09-27T19:13:19Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 27, 2009, 7:13pm UTC](https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236/1 "2009-09-27T19:13:19Z")

</div>

Hi all,

I use the following script to read a file and create a 2D array.  
What bothers me is that I have to use a temporary variable. I wonder if  
there is a better way to read a file and create a 2D array.

Thanks,

Li

##################

# create a 2D array

def file\_process  
@data=[]

# read in the file line by line

File.open(@file) do |a\_file|  
temp=[]  
a\_file.each\_line do|a\_line|  
a\_line.chomp!# remove \n  
temp=a\_line.split(/\t/) # tab is the separator  
@data \<\< temp  
temp=[]  
end  
end  
end

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 27, 2009, 7:31pm UTC](https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236/2 "2009-09-27T19:31:50Z")

</div>

Is this work?

def file\_process  
@data=[]  
File.foreach(@file) {|a\_line| @data \<\< a\_line.chomp.split(/\t/)}  
end

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 27, 2009, 7:40pm UTC](https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236/3 "2009-09-27T19:40:49Z")

</div>

Thairuby -\>a, b {a + b} wrote:

> Is this work?
> 
> def file\_process  
> @data=[]  
> File.foreach(@file) {|a\_line| @data \<\< a\_line.chomp.split(/\t/)}  
> end

Yes, it works and thank you so much.

Li

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 27, 2009, 11:20pm UTC](https://www.ruby-forum.com/t/is-it-possible-to-eliminate-the-temporary-variable/176236/4 "2009-09-27T23:20:46Z")

</div>

On 09/27/2009 07:31 PM, Thairuby -\>a, b {a + b} wrote:

> Is this work?
> 
> def file\_process  
> @data=[]  
> File.foreach(@file) {|a\_line| @data \<\< a\_line.chomp.split(/\t/)}  
> end

In 1.9 you can do

@data = File.foreach(file\_name).map {|l| l.chomp.split /\t/}

In 1.8 you’ll need something like

require ‘enumerator’  
@data = File.enum\_for(:foreach, file\_name).map {|l| l.chomp.split /\t/}

or this which should work in both

@data = File.readlines(file\_name).map {|l| l.chomp.split /\t/}

Kind regards

robert
