2013-08-20 44 views
1

我想使用perl將跟蹤代碼添加到csv文件每一行中鏈接的第一個實例。我怎麼能這樣做?將跟蹤代碼添加到CSV文件的每一行中鏈接的第一個實例

例如

輸入:

ID, text1, link1, text2, text3, link2 
1234, something, http://www.example.com/a/b/c, "lorem", "ipsum", http://www.example.com/image.gif 
1235, something, http://www.example.com/dddd, "lorem", "ipsum", http://www.example.com/image.gif 
1236, something, http://www.example.com/e/f/g/h, "lorem", "ipsum", http://www.example.com/image.gif 

輸出:

ID, text1, link1, text2, text3, link2 
1234, something, http://www.example.com/a/b/c?tracking_code=1&tr2=2, "lorem", "ipsum", http://www.example.com/image.gif 
1235, something, http://www.example.com/dddd?tracking_code=1&tr2=2, "lorem", "ipsum", http://www.example.com/image.gif 
1236, something, http://www.example.com/e/f/g/h?tracking_code=1&tr2=2, "lorem", "ipsum", http://www.example.com/image.gif 
+1

**不要試圖處理與輸入行一樣tring。**讀入其中的每一個,將其處理到其組件字段中,修改相關字段,並將字段重新創建爲輸出字符串。 –

回答

3

使用Text::CSV爲CSV文件妥善處理:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Text::CSV; 

my $file = 'file.csv'; 

my $csv = 'Text::CSV'->new({allow_whitespace => 1, 
          eol => $/, 
          }) or die 'Text::CSV'->error_diag; 
open my $CSV, '<', $file or die $!; 

my $header = $csv->getline($CSV); 
while (my $row = $csv->getline($CSV)) { 
    $row->[2] .= '?tracking_code=1&tr=2'; 
    $csv->print(*STDOUT{IO}, $row); 
} 
$csv->eof or $csv->error_diag; 
+0

當然,URLs是URL而不是普通的字符串。附加查詢字符串可能會產生奇怪的結果。 URI模塊包含一些可以幫助避免這種情況的支持。但是,如果第三行的URL不包含查詢或片段,這可能不是問題。 – amon

+0

'使用Text :: CSV;'在我的控制檯上拋出一個錯誤,找不到該模塊。即使我可以將它加載到我的計算機上,我也需要一個也適用於標準服務器安裝的解決方案。你怎麼看? – AleV

相關問題