2014-11-21 9 views
0

Я пытаюсь сгенерировать SQL-запрос, используя perl, основанный на каталоге dir.Пропустить последнюю строку файла perl

DATA

file_1.csv
file_2.csv
file_3.csv


КОД

$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++; 
} 

Мой Re зультатов

выберите идентификатор, Network_Location из данных, где Network_Location как
'% file_1.csv
%' ИЛИ ​​'
% file_2.csv
%' ИЛИ ​​
'% file_3.csv%' ИЛИ ​​

Желательные Результаты

выберите ID, Network_Location из данных, где Network_Location как
'% file_1.csv%' ИЛИ ​​
Network_Location как '% file_2.csv%' ИЛИ ​​
Network_Location как '% file_3.csv%'


Прежде всего, мой "%"" становится по какой-то причине столкнулся с линией. Я также не хочу печатать 'OR' в конце последней строки файла. В директории, которую я просматриваю, может содержаться сотни файлов.

Любая помощь? Я предполагаю, что это связано с моей переменной $ count, но я не могу на нее наложить. Что касается «%», то я не знаю.

+0

выпуклость вниз линию: вам нужно обрезать возврат каретки прочь '$ _' с' chomp' – sebnukem

ответ

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. Значит, при использовании «карты» это изменит содержимое массива? @Andrzej A. Filip – JDE876

+0

AFAIR 'map' оставляет входной список« как есть », если вы не назначили что-то' $ _' - подробности см. В разделе «perldoc -f map». – AnFi

Смежные вопросы