After reading up on Ruby I thought it sounded good and
decided to learn it so I can manipulate my files on my
linux server such as log, csv, conf etc. Anyway, i'm
a beginner when it comes to programming, so bear with
me.
printf "<html>\n<head>\n"
printf "<title>#{My_Title}</title>\n"
printf "</head>\n<body bgcolor=\"#efefef\">\n"
printf "<table width=\"80%\">\n<tr><td>Call
records</td></tr>\n"
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
printf " <tr%s>\n <td>%d</td>",
index % 2 == 0 ? ' bgcolor="#dddddd"' : '
bgcolor="#cccccc"', index + 1
entries = line.chop.split(/\n/)
entries.each_with_index do |field, index|
printf "<td>%s</td>", entries
end
printf "\n</tr>\n"
end
else
printf "No File Found\n"
end
printf "</body>\n</html>"
If I comment out all the printf commands related to
web and cgi, and run it through the shell, it seems to
be taking each line and putting it into <tr><td>
brackets, but I can't get it to display through a
browser, it stops at the third printf command.
I have tried heaps of different things, but feel like
i'm running around in circles now.
Any advise with this one?
Cheers.
Tristan
___________________________________________________________
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com
Here's a working version that I've made some changes to (some of the
changes were merely to show a different way of doing things -- but I
got rid of the cgi module since you weren't really making enough use
of it to justify the extra load time):
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" : color="#cccccc"
puts " <tr bgcolor=\"#{color}\">\n <td>#{index}</td>"
entries = line.chop.split(/\n/)
entries.each do |field|
puts "<td>#{field}</td>"
end
puts "\n</tr>\n"
end
else
puts "No File Found\n"
end
puts "</body>\n</html>"
···
On 7/14/05, Tristan Knowles <cydonia_1@yahoo.com> wrote:
Hi,
After reading up on Ruby I thought it sounded good and
decided to learn it so I can manipulate my files on my
linux server such as log, csv, conf etc. Anyway, i'm
a beginner when it comes to programming, so bear with
me.
printf "<html>\n<head>\n"
printf "<title>#{My_Title}</title>\n"
printf "</head>\n<body bgcolor=\"#efefef\">\n"
printf "<table width=\"80%\">\n<tr><td>Call
records</td></tr>\n"
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
printf " <tr%s>\n <td>%d</td>",
index % 2 == 0 ? ' bgcolor="#dddddd"' : '
bgcolor="#cccccc"', index + 1
entries = line.chop.split(/\n/)
entries.each_with_index do |field, index|
printf "<td>%s</td>", entries
end
printf "\n</tr>\n"
end
else
printf "No File Found\n"
end
printf "</body>\n</html>"
If I comment out all the printf commands related to
web and cgi, and run it through the shell, it seems to
be taking each line and putting it into <tr><td>
brackets, but I can't get it to display through a
browser, it stops at the third printf command.
I have tried heaps of different things, but feel like
i'm running around in circles now.
Any advise with this one?
Cheers.
Tristan
___________________________________________________________
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com
--
thanks,
-pate
-------------------------
We are often unable to tell people what they need to know, because
they want to know something else, and would therefore only
misunderstand what we said
- the Raven (George MacDonald, Lilith)
After reading up on Ruby I thought it sounded good and
decided to learn it so I can manipulate my files on my
linux server such as log, csv, conf etc. Anyway, i'm
a beginner when it comes to programming, so bear with
me.
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" :
color="#cccccc"
# where index == 5
puts "<tr bgcolor=\"#{color}\">\n
<td>#{index}</td>\n <td>#{line}</td>"
puts "</tr>"
end
else
puts "<tr><td>No File Found:<br /> Check path:
#{Log_File}</td></tr>\n"
end
puts "</body>\n</html>"
Thanks again for your help:).
Tristan
--- pat eyler <pat.eyler@gmail.com> wrote:
Here's a working version that I've made some changes
to (some of the
changes were merely to show a different way of doing
things -- but I
got rid of the cgi module since you weren't really
making enough use
of it to justify the extra load time):
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" :
color="#cccccc"
puts " <tr bgcolor=\"#{color}\">\n
<td>#{index}</td>"
entries = line.chop.split(/\n/)
entries.each do |field|
puts "<td>#{field}</td>"
end
puts "\n</tr>\n"
end
else
puts "No File Found\n"
end
puts "</body>\n</html>"
On 7/14/05, Tristan Knowles <cydonia_1@yahoo.com> > wrote:
> Hi,
>
> After reading up on Ruby I thought it sounded good
and
> decided to learn it so I can manipulate my files
on my
> linux server such as log, csv, conf etc. Anyway,
i'm
> a beginner when it comes to programming, so bear
with
> me.
>
> I use the Asterisk PBX and came across this script
> here which reads a csv file and puts each record
into
> an html table:
>
>
>
> Anyway, I thought I would then apply this basic
> concept to a log file, but I cannot get it to
display
> through a web browser. Here is my script:
>
>
> ===========
> #!/usr/bin/ruby
>
> My_Title = "Testing Log Read"
> Log_File = "/var/log/apache2/error.log"
>
> require 'cgi'
>
> cgi = CGI.new
> printf cgi.header("Content-type" =>
"text/html\n\n")
>
>
> printf "<html>\n<head>\n"
> printf "<title>#{My_Title}</title>\n"
> printf "</head>\n<body bgcolor=\"#efefef\">\n"
> printf "<table width=\"80%\">\n<tr><td>Call
> records</td></tr>\n"
> if File.exists? Log_File
> lines = File.open(Log_File).readlines
> lines.each_with_index do |line, index|
> printf " <tr%s>\n <td>%d</td>",
> index % 2 == 0 ? ' bgcolor="#dddddd"' : '
> bgcolor="#cccccc"', index + 1
> entries = line.chop.split(/\n/)
> entries.each_with_index do |field, index|
> printf "<td>%s</td>", entries
> end
> printf "\n</tr>\n"
> end
> else
> printf "No File Found\n"
> end
> printf "</body>\n</html>"
> ===========
>
>
> If I comment out all the printf commands related
to
> web and cgi, and run it through the shell, it
seems to
> be taking each line and putting it into <tr><td>
> brackets, but I can't get it to display through a
> browser, it stops at the third printf command.
>
>
> I have tried heaps of different things, but feel
like
> i'm running around in circles now.
>
> Any advise with this one?
>
>
> Cheers.
> Tristan
>
>
>
>
>
>
>
--
thanks,
-pate
-------------------------
We are often unable to tell people what they need to
know, because
they want to know something else, and would
therefore only
misunderstand what we said
- the Raven (George MacDonald, Lilith)
___________________________________________________________
How much free photo storage do you get? Store your holiday
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com
Hey that looks nice. Would be a much nicer way to put
any file into a table, that can be my next step. I'm
just trying to get the basics down first, but that
definately looks useful.
Can i just confirm that the above needs some sort of
tables.rb file and a "require 'tables'" sort of thing?
Or is this something else?
Tristan
···
___________________________________________________________
How much free photo storage do you get? Store your holiday
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com
Hey that looks nice. Would be a much nicer way to put
any file into a table, that can be my next step. I'm
just trying to get the basics down first, but that
definately looks useful.
Can i just confirm that the above needs some sort of
tables.rb file and a "require 'tables'" sort of thing?
Or is this something else?
Just another quick question regarding flow control.
What variable can I refer to, and what method do I use
to create a while loop so that only x amount of lines
are shown at once from a file?
This is how I have been approaching it, its obviously
not working, and I'm still not up to speed at working
out how to use methods based on the online reference
details only.
···
=====
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" :
color="#cccccc"
Am I even approaching this the correct way? Or should
this be handled once step before with a grep
statement?
Thanks again.
Tristan
___________________________________________________________
How much free photo storage do you get? Store your holiday
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com
Hey that looks nice. Would be a much nicer way to put
any file into a table, that can be my next step. I'm
just trying to get the basics down first, but that
definately looks useful.
Can i just confirm that the above needs some sort of
tables.rb file and a "require 'tables'" sort of thing?
Or is this something else?
Just another quick question regarding flow control.
What variable can I refer to, and what method do I use
to create a while loop so that only x amount of lines
are shown at once from a file?
This is how I have been approaching it, its obviously
not working, and I'm still not up to speed at working
out how to use methods based on the online reference
details only.
=====
if File.exists? Log_File
lines = File.open(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" :
color="#cccccc"
while index <= 50
puts "<tr bgcolor=\"#{color}\">\n <td>#{index}</td>\n <td>#{line}</td>" puts "</tr>"
end
end
Am I even approaching this the correct way? Or should
this be handled once step before with a grep
statement?
Your code looks fine as is, although I wonder if 50 is a constant number you can rely on. But, here's some more info for you:
If you only want 1 line per iteration, then your best bet is to use IO.foreach. If you only want to slurp X number of lines into a variable, then just keep in mind that IO.readlines returns an array. So, you can use a range as the index and do:
# No need to use the File class, btw
lines = IO.readlines(Log_File)[0..49]
Just keep in mind that, even though you're only selecting 50 lines, the entire file has been slurped into memory.
Just another quick question regarding flow control.
What variable can I refer to, and what method do I use
to create a while loop so that only x amount of lines
are shown at once from a file?
I think this is what you wanted to do:
if File.exists? Log_File
lines = IO.foreach(Log_File).readlines
lines.each_with_index do |line, index|
index % 2 == 0 ? color = "#dddddd" : color = "#cccccc"
puts "<tr bgcolor=\"#{color}\">\n
<td>#{index}</td>\n <td>#{line}</td>"
puts "</tr>"
break if index > 50
end
end
But there are definitely several improvements that could be made on this.
For example, the above reads all the lines, whereas this only reads the
lines you care about from the file:
if File.exists? Log_File
index = 0
IO.foreach(Log_File) do |line|
index % 2 == 0 ? color = "#dddddd" : color = "#cccccc"
puts "<tr bgcolor=\"#{color}\">\n
<td>#{index}</td>\n <td>#{line}</td>"
puts "</tr>"
Thanks -Ezra
On Jul 14, 2005, at 9:32 AM, Daniel Berger wrote:
___________________________________________________________
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com
Thanks again. IO.readlines(file)[a..b] worked a
treat.
I will have a look at foreach.
Once i am able to understand the reference more
easily, I'm sure the doors of opportunity will open
up. For now, I know the logical way i want to do
something, but I'm not sure the ways ruby allows it.
So far its been so simple though, its great.
Cheers.
Tristan
···
--- Daniel Berger <Daniel.Berger@qwest.com> wrote:
If you only want 1 line per iteration, then your
best bet is to use
IO.foreach. If you only want to slurp X number of
lines into a
variable, then just keep in mind that IO.readlines
returns an array.
So, you can use a range as the index and do:
# No need to use the File class, btw
lines = IO.readlines(Log_File)[0..49]
Just keep in mind that, even though you're only
selecting 50 lines, the
entire file has been slurped into memory.
___________________________________________________________
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com