2014-11-21 179 views
0

我正在尝试使用基于dir列表的perl生成SQL查询。跳过文件的最后一行perl

DATA

file_1.csv
file_2.csv
file_3.csv


CODE

$count = 1; 
$files = qr/^.*?$/; 
print "select id,Network_Location from data where Network_Location like\n"; 
while (<>) 
{ 
if ($_ =~ $files) { 
print "'%".$_."%' OR Network_Location like"."\n"; 
} 
$count++; 
} 

我的回复sults

选择ID,从Network_Location数据,其中Network_Location像
'%file_1.csv
%' OR
'%file_2.csv
%' OR
'%file_3.csv%' OR

期望的结果

选择ID,从Network_Location数据,其中Network_Location像
'%file_1.csv%' 或
Network_Location LIKE '%file_2.csv%' 或
Network_Location LIKE '%file_3.csv%'


首先,我的 “%'” 越来越由于某种原因撞倒了一条线。我也不想在文件最后一行的末尾打印'OR'。我解析的目录可能包含数百个文件。

任何帮助?我猜它与我的'$ count'变量有关,但我不能把它放在手指上。至于“%”“被连续击倒,我不知道。

+0

撞下来的一行:你需要修剪回车掉'$ _'用'chomp' – sebnukem 2014-11-21 22:26:09

回答

3
$files = qr/^.*?$/; 
my @matches; 
while (<>) 
{ 
    chomp; # remove end of line characters 
    if ($_ =~ $files) { 
    push @matches, $_; # store match in @matches array 
    } 
} 
if(@matches) { 
    print 
    "select id, Network_Location from data where\n", 
    join(" OR\n", map { "Network_Location like '%$_%'" } @matches), 
    "\n"; 
} 
+0

那我需要什么工作完全正常并且将很可能适用于其他事情也是如此。非常聪明的是如何将文件内容存储到数组中并加入到SQL OR语句中。所以当使用“map”时,会修改数组的内容吗? @Andrzej A. Filip – JDE876 2014-11-24 15:49:02

+0

AFAIR'map'保留输入列表“原样”,除非您为'$ _'指定了某些内容 - 有关详细信息,请参阅'perldoc -f map'。 – AnFi 2014-11-24 18:18:21

相关问题