Non-Hard Coded File.open(newFile)

Like a lot of people I’m new to Ruby and I’m trying to do something I
thought would be pretty simple. I want the user to give me input in the
form of a filename and then subsequently open the file. Here is what I
have so far:

class FileHandler

def initialize()
@fileToParse = fileToParse #I get user input in the form of gets in
#another class.
if File.new(fileToParse)
puts ‘File successfully opened.’
else
puts ‘File failed to open.’
Kernel.exit

end

end
end

However, that won’t work. Doing something like
File.new(“C:/Users/grant/Desktop/test.txt”) works just fine though. The
way I’m currently doing it throws the following error:

F:/Programming/eclipseWorkspace/CSE_655/file_handler.rb:8:in
`initialize’: Invalid argument - C:/Users/grant/Desktop/test.txt
(Errno::EINVAL)

On Sat, Oct 23, 2010 at 6:35 AM, Grant C. [email protected]
wrote:

Like a lot of people I’m new to Ruby and I’m trying to do something I
thought would be pretty simple. I want the user to give me input in the
form of a filename and then subsequently open the file. Here is what I
have so far:

def initialize()
@fileToParse = fileToParse #I get user input in the form of gets in
#another class.

Are you removing the newline at the end of the string from gets ?

F:/Programming/eclipseWorkspace/CSE_655/file_handler.rb:8:in
`initialize’: Invalid argument - C:/Users/grant/Desktop/test.txt

Probably actually “C:/Users/grant/Desktop/test.txt\n” right here ^

(Errno::EINVAL)

HTH,

On Saturday 23 October 2010, Grant C. wrote:

| if File.new(fileToParse)
|File.new(“C:/Users/grant/Desktop/test.txt”) works just fine though. The
|way I’m currently doing it throws the following error:
|
|F:/Programming/eclipseWorkspace/CSE_655/file_handler.rb:8:in
|`initialize’: Invalid argument - C:/Users/grant/Desktop/test.txt
|(Errno::EINVAL)

Your code seems mostly correct, but I don’t exactly understand what
fileToParse is. Is it a call to a fileToParse method (which in turn uses
geets
to retrieve the file name) or a variable? In the first case, I guess the
if
line should be

if File.new(@fileToParse) #note the @

Otherwise, the user will be asked to enter the file name twice.

If fileToParse is a variable, instead, where does it come from?

Also, it would be useful if you pointed out which is line 8 on your
program.
If I assume the first line is

class FileHandler

then line 8 is ‘else’, which I doubt could give you such an error.

Stefano

Thank you so much Hassan, that fix seemed so obvious after you said it
lol. I just changed line 8 to if File.new(fileToParse.delete “\n”) and
it worked just fine. Not sure if I should ask this here but just out of
curiosity does the debugger for 1.9.2 not work? I’m running the eclipse
plug in right now and whenever I try to debug it just vomits all over
itself. Browsed around the web and saw it mentioned a couple of times.

On Sat, Oct 23, 2010 at 8:17 AM, Grant C. [email protected]
wrote:

Thank you so much Hassan, that fix seemed so obvious after you said it
lol. I just changed line 8 to if File.new(fileToParse.delete “\n”)

Good, but you should probably look at fileToParse.chomp for a more
platform-agnostic approach :slight_smile:

Not sure if I should ask this here but just out of
curiosity does the debugger for 1.9.2 not work? I’m running the eclipse
plug in right now

Sorry, no idea about Eclipse.

On Oct 23, 8:35am, Grant C. [email protected] wrote:

Like a lot of people I’m new to Ruby and I’m trying to do something I
thought would be pretty simple. I want the user to give me input in the
form of a filename and then subsequently open the file. Here is what I
have so far:

class FileHandler

def initialize()
@fileToParse = fileToParse #I get user input in the form of gets in

Usually after gets you want to use strip to remove all leading
and trailing whitespace:

file_name = gets.strip