这就是我的表格:
key | driver | machine | result
-----------------------------------
1 | 1234 | abc_machine | pass
2 | 1234 | xyz_machine | fail
当用户从驱动程序中选择“1234”时,所有来自机器的东西都会变得有点混乱。 (用户从gui中选择)
当我这样做时:
$getConfig = `sqlite3 abc.db "SELECT machine FROM $table_name WHERE driver='$drvrSel'"`;
它给了我abc_machine xyz_machine
。
我尝试使用split(/ /, $getConfig)
分隔它们,但不起作用。
谢谢。
如果我在错误的地方提出这个问题,我很抱歉。我试着寻找合适的地方,却找不到它。
答案 0 :(得分:5)
#!/usr/bin/perl
use DBI;
use strict;
my $dbargs = {AutoCommit => 0, PrintError => 1};
my $dbh = DBI->connect("dbi:SQLite:dbname=test.db","","",$dbargs);
my $sth = $dbh->prepare("SELECT machine FROM test WHERE driver = 1234");
$sth->execute();
my @data;
while (@data = $sth->fetchrow_array()) {
print $data[0] . "\n";
}
$sth->finish;
$dbh->disconnect;
答案 1 :(得分:2)
您应该使用DBI。
,而不是调用SQLite程序顺便说一下:
perl -MData::Dumper -e '$_="abc_machine xyz_machine";print Dumper split / /;'
$ VAR1 ='abc_machine';
$ VAR2 ='xyz_machine';
因此,请再次检查$getConfig
中包含的数据。
答案 2 :(得分:0)
那里可能有一个隐藏的标签或换行符。查看字符串之间空字符的ascii值,并在拆分调用中使用它。
答案 3 :(得分:0)
实际上sqlite3支持两个可能对您有用的命令行选项:-list(分隔符为'|')和-csv用于csv文件。有关详细信息,请参见sqlite3的手册页。然后,您可以拆分分隔符或使用Text :: CSV_XS分隔各个字段
根据下面的Rashids评论,我明显误解了你的问题。我的错。这是一种方法:
my $result = `sqlite3 dbname "query"`;
$result =~ s/\n/ /gs;
答案 4 :(得分:-1)
\ W匹配任何非“单词”字符
`@setConfig = split(/\W/, $getConfig);`
这很好地分为:
$ setConfig [0] = abc_machine $ setConfig [1] = xyz_machine
谢谢大家。