2010-07-07 12 views
7

में किसी सरणी के सभी मानों को मुद्रित करने के लिए मैं CSV फ़ाइल से किसी सरणी के सभी मानों को प्रिंट करने का प्रयास कर रहा हूं। मैं नीचे दिए गए उदाहरण में मैन्युअल रूप से ऐसा कर रहा हूं। क्या कोई मुझे सरणी के सभी क्षेत्रों के लिए ऐसा करने के लिए कोड दिखा सकता है इससे कोई फर्क नहीं पड़ता कि कितने फ़ील्ड हैं? मैं मूल रूप से बस एक नई लाइन पर प्रत्येक फ़ील्ड मुद्रित करने की कोशिश कर रहा हूँ।पर्ल

#!/usr/bin/perl 
use strict; 
use warnings; 
use Text::CSV_XS; 

my $file = 'test.csv'; 

my $csv = Text::CSV_XS->new ({ 
    quote_char   => '"', 
    escape_char   => '@', 
    binary    => 1, 
    keep_meta_info  => 0, 
    allow_loose_quotes => 1, 
    allow_whitespace => 1, 
}); 


open (CSV, "<", $file) or die $!; 

while (<CSV>) { 
    if ($csv->parse($_)) { 
     my @columns = $csv->fields(); 
     print "$columns[0]\r\n"; 
     print "$columns[1]\r\n"; 
     print "$columns[2]\r\n"; 
     print "$columns[3]\r\n"; 
     print "$columns[4]\r\n"; 
     print "$columns[5]\r\n"; 
     print "$columns[6]\r\n"; 
     print "$columns[7]\r\n"; 
    } 
    else { 
     my $err = $csv->error_input; 
     print "Failed to parse line: $err"; 
    } 
} 
close CSV; 

उत्तर

11
foreach(@columns) 
{ 
    print "$_\r\n"; 
} 

इसके बजाय के सभी स्तंभों [संख्या]।

+0

धन्यवाद। यह बहुत अच्छा काम किया! –

6

तुम सिर्फ तत्वों रिक्तियों से अलग प्रिंट करना चाहते हैं:

print @columns; 

आप थोड़ा और फैंसी होना चाहते हैं, तो आप join उपयोग कर सकते हैं:

print join("\n", @columns); 

तुम क्या करने की जरूरत है कुछ और, इसे फिर से करें:

foreach (@columns) { 
    # do stuff with $_ 
} 
+0

मैंने अभी शामिल समारोह की कोशिश की और यह भी बहुत अच्छा काम करता है। यह वास्तव में उस स्क्रिप्ट का एक और पहलू हल करता है जिस पर मैं काम कर रहा हूं। बहुत बहुत धन्यवाद! –

+2

आपका 'जॉइन' उदाहरण अंतिम आइटम के बाद एक नई लाइन मुद्रित नहीं करता है। – mob

+0

@mobrule: यदि यह आवश्यक है, तो यह जोड़ने के लिए तुच्छ है: 'प्रिंट जॉइन ("\ n", @columns), "\ n"; ' –

1

यदि आप नैदानिक ​​उद्देश्यों के लिए ऐसा कर रहे हैं (जैसा कि विरोध है प्रस्तुति) आप डेटा :: डम्पर पर विचार कर सकते हैं। किसी भी मामले में यह जानने के लिए एक अच्छा टूल है कि क्या आप अधिक या कम मनमाना डेटा का त्वरित प्रिंटआउट चाहते हैं।

+0

मैं इसे देख लूंगा। धन्यवाद! –

8

डीबगिंग उद्देश्यों के लिए, Data::Dump मेरी पसंद का हथियार है। यह मूल रूप से डेटा संरचनाओं को सुंदर प्रिंट करता है।

use strict; 
use warnings; 
use Data::Dump 'dump'; 

# Do some stuff.... 

dump @array;  # Unlike Data::Dumper, there's no need to backslash ('\@array') 
dump %hash;  # Same goes for hashes 
dump $arrayref; 
dump $hashref; # References handled just as well 

वहाँ कई अन्य तरीकों से ज़ाहिर है, सरणियों मुद्रित करने के लिए कर रहे हैं:

say foreach @columns;   # If you have Perl 5.10+ 
print $_,"\n" foreach @columns; # If you don't 

print "@columns";    # Prints all elements, space-separated by default 

'सर्वश्रेष्ठ' जवाब की स्थिति पर निर्भर करता है। तुम्हें यह क्यों चाहिए? आप किसके साथ काम कर रहे हैं और आप इसके लिए क्या चाहते हैं? फिर तदनुसार कोड का मौसम।