2012-04-06 88 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;