2012-08-31 171 views
-4

我有一個CSV文件my.csv與此內容:Perl腳本從一個特定的行讀取csv文件到文件結尾

abc,yyy 

efg,zzz 

zsc,vvv 

uvw,ggg 

取決於變量$X值我需要從該特定值閱讀直到文件結束。例如:

如果$X = efg,輸出將是:

efg,zzz 

zsc,vvv 

uvw,ggg 

$X = zsc

zsc,vvv 

uvw,ggg 

這是我公司開發的腳本,該腳本讀取一個CSV文件的全部內容,並將其顯示:

use strict; 
use warnings; 

open(my $data, '<', $file) or die "Could not open '$file' $!\n"; 

while (my $line = <$data>) { 
    chomp $line; 
    my @field = split "," , $line; 
    print "$field[0] $field[1]"; 
} 

請幫我一個腳本來顯示上面提到的場景。

+0

我很熟悉perl我只知道讀取整個文件並顯示... use strict; use warnings;我的$ file = $ ARGV [0]或死「需要在命令行上獲取CSV文件\ n」;我的$ sum = 0;打開(我的$ data,'<',$ file)或死「無法打開'$ file'$!\ n」; while(my $ line = <$data>){chomp $ line;我的@fields = split「,」,$ line;打印「$ field [0] $ fields [1]」;} ...請用上面提到的腳本來達到上述的結果 – user1592147

回答

0

如果只是要打印線,其中第一場是比規定值相等或較大的(例如,$X),使用條件:

if ($field[0] >= $X) { 
    print ... 
} 
+0

csv內容被改變......現在怎麼樣......如果它的所有字符串像上面那樣怎麼辦? ..有沒有辦法這樣做 – user1592147

+0

@ysth你可以請現在檢查..我修改了我的問題,幷包括示例腳本 – user1592147

+0

你可以請現在檢查..我修改了我的問題,幷包括示例腳本 – user1592147

1

將該溶液跳過線1〜匹配的文本, if (1 .. /\b$start_word\b/)並將匹配文本中的所有行打印到文件末尾。

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

my $start_word = 'efg'; 
my @data; 

while (<DATA>) { 
    chomp; 
    if (1 .. /\b$start_word\b/) { 
     #print if /\b$start_word\b/; 
     @data = [split /,/] if /\b$start_word\b/; 
    } 
    else { 
     #print; 
     push @data, [split /,/]; 
    } 
} 

# Do something with @data 

__DATA__ 
abc,yyy 
efg,zzz 
zsc,vvv 
uvw,ggg 
+0

「print if/\ b $ start_word \ b /」;這條線做什麼...如果開始的話是efg ....輸出應該是efg,zzz zsc,vvv uvw,ggg ....這個工作... – user1592147

+0

*這條線做什麼*。這將打印當前行,如果該行包含起始詞「efg」(然後每一行後面的文件結束)。複製我的代碼並運行它以查看它的工作原理。 –

+0

感謝您的幫助,它確實顯示的字段aftr efg ....有沒有什麼辦法,我可以逐一提取這些值在逐行解析逐行csv,這樣我可以傳遞到另一個子例程進一步實現在這些值obatined ...真的很感謝你的幫助 – user1592147

相關問題