2009-06-03 81 views
1

我有一個從票務系統中提取的CSV文件(我沒有直接的數據庫訪問權限),並且需要在另一個數據庫中添加一些列,然後才能在Excel中創建報告。如何將字符附加到文件中的一行?

我正在使用Perl將數據從其他數據庫中提取出來,並希望在處理文件時將附加列附加到每行的末尾。

有沒有辦法做到這一點,而不必基本上創建一個新的文件?其基本結構是:

foreach $line (@lines) { 
    my ($vars here....) = split (',',$line); 
    ## get additional fields 
    ## append new column data to line 
} 

回答

3

您可以使用領帶::文件(在Perl的核心因爲Perl 5.8)修改位置的文件:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Tie::File; 


my $file = shift; 

tie my @lines, "Tie::File", $file 
    or die "could not open $file: $!\n"; 

for my $line (@lines) { 
    $line .= join ",", '', get_data(); 
} 

sub get_data { 
    my $data = <DATA>; 
    chomp $data; 
    return split /-/, $data 
} 

__DATA__ 
1-2-3-4 
5-6-7-8 

您也可以使用帶有@ ARGV/<就地編輯>招設置$^I:

#!/usr/bin/perl 

use strict; 
use warnings; 

$^I = ".bak"; 

while (my $line = <>) { 
    chomp $line; 
    $line .= join ",", '', get_data(); 
    print "$line\n"; 
} 

sub get_data { 
    my $data = <DATA>; 
    chomp $data; 
    return split /-/, $data 
} 

__DATA__ 
1-2-3-4 
5-6-7-8 
+0

第二個選項適用於我,更少的圖書館下載等,也消除了從我的代碼約10行。 – MattS 2009-06-03 15:38:04

0

考慮使用-i選項就地編輯<>文件。

7

你可以看看DBD::CSV來對待文件,就好像它是一個數據庫(它也會爲你處理轉義的特殊字符)。

1

儘管任何漂亮的界面,最終你必須要讀取文件中的行由行。如果一些引用字段可以嵌入換行符,則甚至可能需要做更多的事情。使用關於CSV的知識來避免某些問題。 Text::CSV_XS應該爲您節省大部分奇怪情況的麻煩。

相關問題