0

I have the folling Perl script that I am using to import data directly into a database form an html file. The file is called 'demo.htm'. The script works without the databse connection part in that it strips off what I do not need. However now I am trying to read in the html file and input into the database and these adaptations are not working. The db, user and password are all 'demo' and it is using a SQL server 2008 R2 database.

use warnings; 
use strict;  
use DBI;
use HTML::TreeBuilder;  

open (FILE, "demo") || die "couldn't open the file!";
open (F1, ">demo.htm") || die "couldn't open the file!";
open (F2, ">demo2.csv") || die "couldn't open the file!";

# database name, user and password
my $data_source = q/dbi:ODBC:demo/;
my $user = q/demo/;
my $password = q/demo/;

# Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect($data_source, $user, $password)
or die "Can't connect to $data_source: $DBI::errstr";

print F1 "Name\|Lives In\|Commented\n";
print F2 "Name\|Lives In\|Commented\text\n";

my $tree = HTML::TreeBuilder->new_from_content(     do { local $/; <DATA> } ); 

for ( $tree->look_down( 'class' => 'postbody' ) ) 
{    
my $location = $_->look_down( 'class' => 'posthilit' )->as_trimmed_text;     

my $comment  = $_->look_down( 'class' => 'content' )->as_trimmed_text;     

my $name     = $_->look_down( '_tag'  => 'h3' )->as_text;     

$name =~ s/^Re:\s*//;     $name =~ s/\s*$location\s*$//;      

print "Name: $name\nLives in: $location\nCommented: $comment\n"; } 

# This query generates a result set with one record in it.
#my $sql = "SELECT 1 AS test_col";

my $sql = "insert into demo2 values \(Name, Lives In, Comeented, text)";

print $sql;
print "\n";

# Prepare the statement.
my $sth = $dbh->prepare($sql)
or die "Can't prepare statement: $DBI::errstr";

# Execute the statement.
$sth->execute();

}
print $b;
print " end\n";

# Disconnect the database from the database handle.
$dbh->disconnect;

Any help on where I have gone wrong with this would be greatly appreciated. An example of the html is -

<div class="postbody">         <h3><a href "foo">Re: John Smith <span class="posthilit">England</span></a></h3>         <div class="content">Is C# better than Visula Basic?</div>     </div> 
1
  • "these adaptations are not working" Might be more useful to explain in what way they are not working. What unexpected behaviour are you seeing? Are there any error messages? Commented Jul 7, 2011 at 10:21

1 Answer 1

2

In your SQL query you should use data that you extracted.

my $sql = "insert into demo2 values (?,?,?,?)";
...
$sth->execute($name,$location,$comment,'');
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.