【问题标题】:Skip last line of file perl跳过文件的最后一行 perl
【发布时间】:2015-01-20 04:33:00
【问题描述】:

我正在尝试使用基于目录列表的 perl 生成 SQL 查询。

数据

file_1.csv
文件_2.csv
文件_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++;
}

我的结果

从 Network_Location 喜欢的数据中选择 id,Network_Location
'%file_1.csv
%' 或
'%file_2.csv
%' 或
'%file_3.csv%' 或

期望的结果

从 Network_Location 喜欢的数据中选择 id,Network_Location
'%file_1.csv%' 或
Network_Location like '%file_2.csv%' OR
Network_Location like '%file_3.csv%'


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

有什么帮助吗?我猜这与我的“$count”变量有关,但我不能指望它。至于“%'”被连续撞倒,我不知道。

【问题讨论】:

  • 下一行:你需要用chomp修剪掉$_的回车

标签: sql perl while-loop increment


【解决方案1】:
$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";
}

【讨论】:

  • 这非常适合我的需要,并且很可能也适用于其他事情。非常聪明地将文件内容存储到数组中并加入 SQL OR 语句。那么当使用“map”时,会修改数组的内容吗? @Andrzej A.菲利普
  • AFAIR map 保留输入列表“原样”,除非您将某些内容分配给 $_ - 有关详细信息,请参阅 perldoc -f map。
猜你喜欢
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多