After some testing i noticed that while(<FILE>) returns a line-by-line data of the file and it is storing it in $_
That's good by what i need is to get to whole data content in one var so the above solution aint gonna help me, of course i could concatenate every line after another to construct the whole data of the file but that would be dumb.
I noticed after trying every weird idea that came into my mind that $data=<FILE> would save the whole file's contents in a split of a sec without the need for looping, so what i did to make the job done was the following:
#=========== INSERTING MULTIPLE FILENAMES & CONTENTS INTO DATABASE ===
+==========
my $data;
my $insert = $db->prepare( 'INSERT INTO articles (title, body) VALUES
+(?, ?)' );
my @files = glob "$ENV{'DOCUMENT_ROOT'}/data/text/*.txt";
foreach (@files)
{
open FILE, "$_" or die $!;
$_ = map m{([^/]+)\.txt}, $_; #Strip out of the string th path
+and extension leaving only the filename intact
$data = <FILE>; #Grab the whole file contents at
+once
$insert->execute($_, $data) or print $db->errstr;
close FILE;
}
All that in order to achieve opening of all files one-by-one and inserting each of the filename and its corresponding content as an entry in mysql table 'articles'
update:
After running this test script:
foreach (@files)
{
open FILE, "$_" or die $!;
print "$_", br() x3;
$_ = map m{([^/]+)\.txt}, $_; #Strip out of the string the path
+ and extension leaving only the filename intact
print "$_", br() x3;
$data = <FILE>; #Grab the whole file contents at
+once
print "$data";
exit;
close FILE;
}
i noticed 2 errors i cannot solve:
a) The '$_' doesn't hold the value of the current filename opened without paths and extension but instead it has the number of '1' in it. Its a syntax error obviously that i have made and don't know how to properly write it.
b) @data though it is correct because it contains the contents of each file when looping and contents are stored by me in utf8 when i write the text files
But although i'm not striping out the filename correctly, even if i was, i will still need to re-encode the filename to utf8 before inserting into the database because filenames are greek-iso.
i can do that as Encode::from_to($_, 'ISO-8859-7', 'utf-8') but the question is will i have to or the $insert->execute($_, $data); will do that automatic for me before inserting the values in the db? |