2010-05-08 13 views
1

Pourquoi seul le second exemple ajoute l'extension au nom de fichier et qu'est ce que le "/ r" dans ".csv/r" pour.Dans DBD :: CSV, que signifie un/r dans l'attribut f_ext?

#!/usr/bin/env perl 
use warnings; use strict; 
use 5.012; 
use DBI; 

my $dbh = DBI->connect("DBI:CSV:f_dir=/home/mm", { RaiseError => 1, f_ext => ".csv/r"}); 

my $table = 'new_1'; 
$dbh->do("DROP TABLE IF EXISTS $table"); 
$dbh->do("CREATE TABLE $table (id INT, name CHAR, city CHAR)"); 

my $sth_new = $dbh->prepare("INSERT INTO $table(id, name, city) VALUES (?, ?, ?,)"); 
$sth_new->execute(1, 'Smith', 'Greenville'); 
$dbh->disconnect(); 

# -------------------------------------------------------- 

$dbh = DBI->connect("DBI:CSV:f_dir=/home/mm", { RaiseError => 1 }); 
$dbh->{f_ext} = ".csv/r"; 

$table = 'new_2'; 
$dbh->do("DROP TABLE IF EXISTS $table"); 
$dbh->do("CREATE TABLE $table (id INT, name CHAR, city CHAR)"); 

$sth_new = $dbh->prepare("INSERT INTO $table(id, name, city) VALUES (?, ?, ?,)"); 
$sth_new->execute(1, 'Smith', 'Greenville'); 
$dbh->disconnect(); 

Répondre

2

Il force l'extension à être requise (plutôt qu'optionnelle). Il vient de DBD::File (une classe de base pour DBD::CSV):

f_ext 
     This attribute is used for setting the file extension where (CSV) 
     files are opened. There are several possibilities. 

      DBI:CSV:f_dir=data;f_ext=.csv 

     In this case, DBD::File will open only "table.csv" if both 
     "table.csv" and "table" exist in the datadir. The table will still 
     be named "table". If your datadir has files with extensions, and 
     you do not pass this attribute, your table is named "table.csv", 
     which is probably not what you wanted. The extension is always 
     case-insensitive. The table names are not. 

      DBI:CSV:f_dir=data;f_ext=.csv/r 

     In this case the extension is required, and all filenames that do 
     not match are ignored. 
+0

f_ext = .csv Dans ce cas, DBD :: File ouvrira uniquement "table.csv" si les deux "table.csv" et "table" existent dans le datadir. f_ext = .csv/r Dans ce cas, l'extension est requise et tous les noms de fichiers qui ne correspondent pas sont ignorés. Cela signifie-t-il que, avec "f_ext = .csv", je peux lire des fichiers sans extension (dans les données). J'ai essayé de le faire, mais ça n'a pas marché. –

0

J'ai oublié pour le 2. placeholders et 3. l'argument; maintenant le premier exemple fonctionne aussi.

#!/usr/bin/env perl 
use warnings; use strict; 
use 5.012; 
use DBI; 

my $dbh = DBI->connect("DBI:CSV:f_dir=/home/mm", undef, undef, { RaiseError => 1, f_ext => ".csv/r"}); 

my $table = 'new_1'; 
$dbh->do("DROP TABLE IF EXISTS $table"); 
$dbh->do("CREATE TABLE $table (id INT, name CHAR, city CHAR)"); 

my $sth_new = $dbh->prepare("INSERT INTO $table(id, name, city) VALUES (?, ?, ?,)"); 
$sth_new->execute(1, 'Smith', 'Greenville'); 
$dbh->disconnect(); 

# -------------------------------------------------------- 

$dbh = DBI->connect("DBI:CSV:f_dir=/home/mm", undef, undef, { RaiseError => 1 }); 
$dbh->{f_ext} = ".csv/r"; 

$table = 'new_2'; 
$dbh->do("DROP TABLE IF EXISTS $table"); 
$dbh->do("CREATE TABLE $table (id INT, name CHAR, city CHAR)"); 

$sth_new = $dbh->prepare("INSERT INTO $table(id, name, city) VALUES (?, ?, ?,)"); 
$sth_new->execute(1, 'Smith', 'Greenville'); 
$dbh->disconnect();