2014-11-21 128 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

相關問題