2012-04-06 49 views
0

我使用硒的工作和我有一个从“// UL”提取一些数据,不幸的是这数据包含一个换行符,我试图用格格()函数来删除此(因为我需要在一个CSV的文件中写入),但它不工作,代码的部分是:的Perl +硒:格格()失败

open (INFO, '>>file.csv') or die "$!"; 
print INFO ("codice\;descrizione\;prezzo\;URLFoto\n"); 
my $sel = Test::WWW::Selenium->new(host => "localhost", 
            port => 4444, 
            browser => "*chrome", 
            browser_url => "http://www.example.com/page.htm"); 
$sel->open_ok("/page.htm"); 
$sel->click_ok("//table[2]/tbody/tr/td/a/img"); 
$sel->wait_for_page_to_load_ok("30000"); 
my $descrizione = $sel->get_text("//ul"); 
my $prezzo = $sel->get_text("//p/font"); 
my $codice = $sel->get_text("//p/font/b"); 
my $img = $sel->get_attribute ("//p/img/\@src"); 
chomp ($descrizione); 
print INFO ("$codice\;$descrizione\;$prezzo\;$img\n"); 
$sel->go_back_ok(); 

# Close file 
close (INFO); 

但输出是:

Art. S500 Set Yoga "Siddhartha";Idea regalo ?SET YOGA Siddhartha? Elegante scatola in cartone lucido contenente: 

2 mattoni in legno naturale mis. cm 20 x 12,5 x 7 

1 cinghia in cotone mis. cm 4 x 235 

1 stuoia in cotone mis. cm 70 x 170  

1 manuale di introduzione allo yoga stampato 

Tutto rigorosamente realizzato con materiali natural;€ 82,50;../images/S500%20(Custom).jpg 
+0

如果我没有记错,格格假定UNIX换行符。也许你的数据有一个DOS换行符? – 2012-04-06 15:55:56

+1

@AlexHowansky'chomp'尝试从其字符串参数的末尾删除'$ /'中包含的任何内容。没有更多,没有更多。 – TLP 2012-04-06 18:31:46

+1

这不是说换行符的定义不同,但是_line ending_的定义不同。 – 2012-04-06 21:01:53

回答

1

chomp删除字符串的末尾或一组字符串的特定于平台的端部的行的字符序列。

在你的情况,你似乎有嵌入式换行符和/或回车一个字符串。因此,你可能想用其他的东西替换任何可能的行结束序列,比如说一个空格字符。在这种情况下,你会怎么做:

$descrizione =~ s/[\r\n]+/ /g; 
+0

你是天才:) 非常感谢 – fdicarlo 2012-04-10 07:31:14

-1

使用此删除\r为好。

$descrizione =~ s#[\r\n]+\z##; 

问候,

+1

你的替代操作符中没有“i”或“s”。区分大小写不能播放,并且模式中没有'.'字符。 – 2012-04-06 18:09:31

+0

是的,你是对的。我总是将这些开关添加到我的正则表达式中。 – user1126070 2012-04-10 06:33:29

0

如果您要更换所有的垂直的空白,Perl有针对特殊字符类快捷键:

use v5.10; 
$descrizione =~ s/\v+/ /g;