以下代码用于查询数据库并生成记录输出文件的脚本中。我遇到的一个问题是,在文件的最末端似乎插入了一个换行符,并且它正在引起我正在努力将数据导入另一个数据库的另一个脚本的悲痛。我认为这就像文件句柄上的chomp
一样简单但不允许这样做。我已经阅读了很多方法在网上做到这一点,但不确定要走的路。你们有没有办法做到这一点?
while ($queryResults->MoveNext() == $CQPerlExt::CQ_SUCCESS) {
$swCR = $session->GetEntityByDbId("SWCR", $queryResults->GetColumnValue(1));
# Gather data
$swID = $swCR->GetFieldValue("RecordID")->GetValue();
$swData = "<RecordID>" . $swID . "</RecordID>";
foreach $fieldName (@fieldNames)
{
$swData = $swData . "<" . $fieldName . ">" . $swCR->GetFieldStringValue($fieldName) . "</" . $fieldName . ">";
}
# Build file with records seperated by custom line delimiter
print OUTFILE $swData . "~~lineDelimiter~~\n";
}
close(OUTFILE);
答案 0 :(得分:1)
您可以在每行的开头而不是结尾处输出换行符,并跳过第一行。
my $count = 0;
my @stuff = qw(a b c d);
while (my $letter = shift @stuff) {
print "\n" if $count++;
print $letter;
}
print "__test";
这将输出:
a
b
c
d__test
答案 1 :(得分:0)
由于你可以完全控制输出,我会从那个角度攻击它,因为它从不首先发出最后的换行符。但是,由于这是我们正在讨论的Perl,因此不止一种方法。 ; - )
我在这里使用truncate
将文件截断为比以前少1个字节(-s
以字节为单位返回文件大小)。
my $file = 'test.txt';
open(my $fh, '>', $file) or die $!;
print $fh "$_\n" for 1..10;
close($fh);
truncate($file, (-s $file) - 1);
输出:
$ od -c test.txt
0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n
0000020 9 \n 1 0
0000024