Adding modules to @INC

I'm trying to run a script that uses TableExtract.pm, which in turn uses Parser.pm and Entities.pm. I've placed these files in the two lib areas, c:\perl\lib and c:\perl\site\lib.

I did perl -e "print join(qq[\n], @INC)" and it listed the two above paths. I pasted the above pm's through notepad, do they need to be compiled? here's the error:

C:\>perl ./html2csv.pl shitlink.html
Can't locate HTML/TableExtract.pm in @INC (@INC contains: /home/ron/modules/lib/
site_perl /home/ron/modules c:/Perl/lib c:/Perl/site/lib .) at ./html2csv.pl lin
e 17.

For some reason, it lists /home/ron/modules/lib/site_perl, which I can't even find on my system. Why doesn't it show this path when i do perl -e "print join(qq[\n], @INC)" ?
dprasadAsked:
Who is Participating?
 
ozoConnect With a Mentor Commented:
use lib('/home/ron/modules'); #is what's putting /home/ron/modules in @INC
if that's not where you put HTML/TableExtract.pm, then you can do a use lib to the place where you did put it
0
 
ozoCommented:
Did you put TableExtract.pm in c:/Perl/lib/HTML or /home/ron/modules/HTML?
0
 
dprasadAuthor Commented:
I don't have a c:\perl\lib\html, or the /home/ron/modules/HTML. i looked everywhere, did searches on the directory name. I don't see it anywhere
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
dprasadAuthor Commented:
could it be hidden somehow?
0
 
ozoCommented:
Try creating the directory c:/Perl/lib/HTML or /home/ron/modules/HTML and put TableExtract.pm in it.
0
 
ozoCommented:
How did you install the HTML::TableExtract  module?
0
 
dprasadAuthor Commented:
OK I'll try that. Well, I just copied the TableExtract.pm from the CPAN site into a text file and saved it with a .pm extension. Am I missing something here?
0
 
dprasadAuthor Commented:
Ok, I sorry it's late, here's my code..there's a library call that I overlooked. I was given this script by someone, I will ask them what those libs are from. I tried what you said though, and the program runs, printing the information the screen. All I'm trrying to do is convert html  tables into a csv tables for import into a database. Its designed to accept a url. I gave it a html file.

 I will ask the person who gave this to me more about it





#!/usr/bin/perl

# Copyright (C) 2003 Ron Coscorrosa
# Released under the terms of the MIT License

# Converts HTML tables to CSV format for manuipulation within
# a spreadsheet program.

use strict;
use warnings;

use lib('/home/ron/modules');
use lib('/home/ron/modules/lib/site_perl');

use LWP::Simple qw/get/;
use CGI::Pretty qw/:standard/;
use HTML::TableExtract;


if (param('url'))
{
  print header('text/plain');
  write_csv(param('url'));
}
else
{
   print header;
   print start_html('-title'=>'URL to CSV Converter');
   print start_form('-method'=>'get');
   print "URL: ", textfield('-name'=>'url', '-size'=>65), p;
   print submit('-value'=>'Convert URL to CSV');
   print end_form, p;
   print "Converts the tables in a URL to CSV format for easier manipulation in a spreadsheet program\n", p;
   print "Copyright &copy; 2003 <a href=\"mailto:web\@coscorrosa.com\">Ron Coscorrosa</a>\n";
   print end_html;
}


sub write_csv
{
  my $html = get($_[0]);

  if (! $html)
  {
     print "Unable to retrieve HTML from URL: \"$_[0]\".  Please make sure you typed the URL correctly.";
     return;
  }

  my $te = new HTML::TableExtract();
  $te->parse($html);

  for my $ts ($te->table_states)
  {
     for my $row ($ts->rows)
     {
        print join(',', map { s/^\s+//;  s/\s+$//; s/\n+//; "\"$_\""}  @$row), "\n";
     }
  }
}
0
 
davorgConnect With a Mentor Commented:
In general, Perl modules shouldn't just be copied into directories that may or may not be in @INC. You should install them properly using the procedure described in the README file. On Windows you can often circumvent that by using the "ppm" program which comes with ActivePerl.

But if you really need to install it by copying, then for a module called HTML::TableExtract you need to create a directory called HTML within one of the directories in @INC (that should probably be c:\perl\site\lib) and put TableExtract.pm into that directory.

Hope that helps,

Dave...
0
 
dprasadAuthor Commented:
ok guys, I just realized this script isnt going to work for what I'm trying to do. I'm retrieving data from tables, but I need to split up some of the data that's in once cell and put them into separate columns, for example

(html col 1)                    (html col 2)
vintage: 1966                  price: $120.00
style: red
region: finger lakes

needs to look like (in the csv file) for each record:

col1        col2      col3             col4
vintage    style     region          price

1966        red       fingerlakes   120

So it seems more prudent to use the HTML::TreeBuilder and then parse the data from that, so I can delimit according to the html tag and not by table cells.

Here's the actual html

<table width="100%" border="0" cellspacing="0" cellpadding="0">

        <tr>
          <td>
                  <span class="bodybold">Name: </span><span class="body">
            <A HREF="http://www.awinestore.com/cgi-local/quikstore.cgi?store=ny&search=yes&detail=yes&product=08500000818&category=&keywords=&hits_seen=&page=search.html&and=&affiliate_id=">Anapamu Pinot Noir</a></span>
                 <span class="bodyunder"></span><br>
                  <span class="bodybold">Vintage: </span><span class="body">2001</span><br>
                  <span class="bodybold">Style: </span><span class="body">Pinot Noir</span><br>

                  <span class="bodybold">Vineyard: </span><span class="body"></span><br>
                  <span class="bodybold">Region: </span><span class="body">Monterey County</span></td>
        </tr>
        <tr>
          <td class="body"><span class="bodybold">Description:</span><span class="body">Round, with modestly tannic earth, ripe plum, currant and sweat character. Drink now through 2005. 21,432 cases made. - Wine Spectator 7/31/03 &nbsp;</span><br>
          <span class="bodybold">Size:</span> 750ml&nbsp;&nbsp;<span class="bodybold">Qty Available:</span>  10<br><span class="bodybold">Store:</span>&nbsp;A Wine Store New York
        </td>

        </tr>
      </table>

Can the treebuilder handle span tags? If not, I can do a replace all and change it to something else. This script seems to do what I need, except it parses bases on <a href.. tags and it prints to the screen. I need it to print the changes to a csv file.

use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new;
$tree->parse_file('example.html') || die $!;

foreach my $a( $tree->find_by_tag_name('a')) {

my $href = $a->attr('href') || next;

my $text_content = $a->as_text;


print "$text_content\n";

}

$tree->delete;

Thanks!
0
 
dprasadAuthor Commented:
sorry my perl knowledge is extremely limited!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.