Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > passing parameter

Reply
Thread Tools

passing parameter

 
 
Arun Kumar
Guest
Posts: n/a
 
      03-26-2009
Hi,
This is my code strip

contents.each do |content|
#scanning the content using regexp to fetch the url
url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)
data = Net::HTTP.get(URI.parse("#{url}"))
#extracting the feeds url from 'data' using 'regexp'
xml = data.scan(/<link
rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
end

Now what i want is to pass the 'xml' variable as a parameter to the next
class but i'm not able to do that because the 'xml' variable is inside
an array. Can anybody please tell me about how to do it.

Regards
Arun Kumar
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      03-26-2009
2009/3/26 Arun Kumar <(E-Mail Removed)>:
> Hi,
> This is my code strip
>
> =A0contents.each do |content|
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0#scanning the content using regexp=

to fetch the url
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0url =3D content.scan(/(http:\/\/.*=

|https:\/\/.*)/i)

Two notes: #scan returns a potentially empty Array and not a single object.

And you can make the regexp simpler and more efficient at the same time

/https?:\/\/.*)/i

Note also that using ".*" is dangerous because depending on your input
this may match too much.

> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0data =3D Net::HTTP.get(URI.parse("=

#{url}"))

The construct "#{expr}" is better replaced by expr.to_s and in this
case, since url should be String you do not even need that.

> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0#extracting the feeds url from 'da=

ta' using 'regexp'
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0xml =3D data.scan(/<link
> rel=3D"alternate".*?href=3D"(.*?xml|.*?rdf)"/i)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0end
>
> Now what i want is to pass the 'xml' variable as a parameter to the next
> class but i'm not able to do that because the 'xml' variable is inside
> an array. Can anybody please tell me about how to do it.


Where is "xml in an array"? The variable "xml" references an Array
because you use String#scan (see above). You can simply iterate that
Array as any other Array, too. Where is the problem?

Cheers

robert

--=20
remember.guy do |as, often| as.you_can - without end

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      03-26-2009
PS: Forgot to mention that apparently you still do not use the proper
tool for the job. Multiple have been named already (REXML, Nokogiri,
Hpricot etc.) in another thread.

--
remember.guy do |as, often| as.you_can - without end

 
Reply With Quote
 
Arun Kumar
Guest
Posts: n/a
 
      03-26-2009
Robert Klemme wrote:
> 2009/3/26 Arun Kumar <(E-Mail Removed)>:
>> Hi,
>> This is my code strip
>>
>> �contents.each do |content|
>> � � � � � � � � � �#scanning the content using regexp to fetch the url
>> � � � � � � � � � �url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)

>
> Two notes: #scan returns a potentially empty Array and not a single
> object.
>
> And you can make the regexp simpler and more efficient at the same time
>
> /https?:\/\/.*)/i
>
> Note also that using ".*" is dangerous because depending on your input
> this may match too much.
>
>> � � � � � � � � � �data = Net::HTTP.get(URI.parse("#{url}"))

>
> The construct "#{expr}" is better replaced by expr.to_s and in this
> case, since url should be String you do not even need that.
>
>> � � � � � � � � � �#extracting the feeds url from 'data' using 'regexp'
>> � � � � � � � � � �xml = data.scan(/<link
>> rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
>> � � � � � � � �end
>>
>> Now what i want is to pass the 'xml' variable as a parameter to the next
>> class but i'm not able to do that because the 'xml' variable is inside
>> an array. Can anybody please tell me about how to do it.

>
> Where is "xml in an array"? The variable "xml" references an Array
> because you use String#scan (see above). You can simply iterate that
> Array as any other Array, too. Where is the problem?


Hi,
The problem is that i need to parse the xml from the feeds url and the
code for it is written in another class. So I need to pass the feed url
ie.'xml'. Since it is written inside an iterator ie. in between each
do|content|, i cannot pass it as a prameter to the other class since xml
variable will not be accessible after the iterator ends. Please help me.

N. B. Writing the code will be more helpfull for me to understand

Regards
Arun Kumar

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

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      03-26-2009
2009/3/26 Arun Kumar <(E-Mail Removed)>:
> Robert Klemme wrote:
>> Where is "xml in an array"? =A0The variable "xml" references an Array
>> because you use String#scan (see above). You can simply iterate that
>> Array as any other Array, too. =A0Where is the problem?

>
> The problem is that i need to parse the xml from the feeds url and the
> code for it is written in another class. So I need to pass the feed url
> ie.'xml'. Since it is written inside an iterator ie. in between each
> do|content|, i cannot pass it as a prameter to the other class since xml
> variable will not be accessible after the iterator ends. Please help me.


I don't see how the fact that variable "xml" goes out of scope at some
point in time prevents using in a different class or method. You
simply have to pass it on at the time when it is _in_ scope.

Frankly, I get the impression that you lack some basic understanding
of how Ruby works, especially what objects and variables are. I
suggest you work through some introductory material or search the
archives of this group - there have been numerous discussions about
call by reference etc.

Regards

robert

--=20
remember.guy do |as, often| as.you_can - without end

 
Reply With Quote
 
Arun Kumar
Guest
Posts: n/a
 
      03-26-2009
Robert Klemme wrote:
> 2009/3/26 Arun Kumar <(E-Mail Removed)>:
>> Robert Klemme wrote:
>>> Where is "xml in an array"? �The variable "xml" references an Array
>>> because you use String#scan (see above). You can simply iterate that
>>> Array as any other Array, too. �Where is the problem?

>>
>> The problem is that i need to parse the xml from the feeds url and the
>> code for it is written in another class. So I need to pass the feed url
>> ie.'xml'. Since it is written inside an iterator ie. in between each
>> do|content|, i cannot pass it as a prameter to the other class since xml
>> variable will not be accessible after the iterator ends. Please help me.

>
> I don't see how the fact that variable "xml" goes out of scope at some
> point in time prevents using in a different class or method. You
> simply have to pass it on at the time when it is _in_ scope.
>
> Frankly, I get the impression that you lack some basic understanding
> of how Ruby works, especially what objects and variables are. I
> suggest you work through some introductory material or search the
> archives of this group - there have been numerous discussions about
> call by reference etc.

Hi,
Thanks for the advice. As u mentioned i'm new to ruby and i have still
to learn a lot. But the problem is that i have to prepare an assignment
in ruby regarding html extraction and to parse xml feeds from the html
content. First i have to read the url from a csv file, then i should
read the html contents of the url and then parse the xml. It is a tidy
job. I have completed a major part of it until i stuck into this part.
For providing further information I'm including the code

class hello
def hi(contents)
begin
contents.each do |content|
#scanning the content using regexp to fetch the url
url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)
#getting the contents of the url using
'Net::HTTP.get' by communicating to the host server
response =
Net::HTTP.get_response(URI.parse("#{url}"))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then response =
Net::HTTP.get(URI.parse(response['location']))
else
response.error!
end
end
end

class extract
def parser(xmlData)
#extracting the feeds url from 'data' using 'regexp'
xmlData = response.scan(/<link
rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
#rssData = data.scan(/<link rel="alternate"
type="application\/rss\+xml".*?href="(.*?)"/i)
#atomData = data.scan(/<link rel="alternate"
type="application\/atom\+xml".*?href="(.*?)"/i)

if xmlData
xmlData.each do |xml|
#getting the xml contents of the xml url
using 'Net::HTTP.get' by communicating to the host server
tags = Net::HTTP.get(URI.parse("#{xml}"))
#getting the text in between the description
tag
values =
tags.scan(/<description>(.*?)<\/description>/im)
# storing the description in a hash
details = Hash.new
details = {"#{xml}"=>"#{values}"}
end
end
end
puts "Processing complete!"
end
end

As u see the 'response' variable is the variable to be send as a
parameter to the extract class. But it is inside an
iterator(contents.each) I cannot pass the whole content to the next
class. Can u please give me a suggestion for that

Regards
Arun Kumar
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Passing parameter to function not expecting parameter Mister B C Programming 8 08-26-2010 08:01 AM
decltype as a template parameter when containing reference to anothertemplate parameter. Isti C++ 2 04-19-2010 10:01 PM
without declare parameter [double square(parameter)] return 0 in main WanHongbin@gmail.com C Programming 5 10-01-2008 03:31 AM
Using declaration inside first template parameter as default valuefor second template parameter. Stuart Redmann C++ 5 12-14-2007 08:42 AM
Parameter List / Parameter Block / Anything patterns... mast2as@yahoo.com C++ 4 03-29-2007 09:37 PM



Advertisments