मैं एक संख्या होने के प्रत्येक लाइन के साथ, एक डेटा फ़ाइल है में एक डेटा फ़ाइल को पढ़ने के लिए सही तरीका,एक सरणी
10
20
30
40
मैं इस फ़ाइल कैसे पढ़ सकते हैं और एक सरणी में डेटा स्टोर करते हैं की तरह?
ताकि मैं इस सरणी पर कुछ संचालन कर सकूं।
मैं एक संख्या होने के प्रत्येक लाइन के साथ, एक डेटा फ़ाइल है में एक डेटा फ़ाइल को पढ़ने के लिए सही तरीका,एक सरणी
10
20
30
40
मैं इस फ़ाइल कैसे पढ़ सकते हैं और एक सरणी में डेटा स्टोर करते हैं की तरह?
ताकि मैं इस सरणी पर कुछ संचालन कर सकूं।
बस एक सरणी में फ़ाइल को पढ़ने, तत्व प्रति एक लाइन, तुच्छ है:
open my $handle, '<', $path_to_file;
chomp(my @lines = <$handle>);
close $handle;
अब फाई की लाइनें ले सरणी @lines
में हैं।
use File::Slurp;
my @lines = read_file("filename", chomp => 1); # will chomp() each line
आप प्रत्येक पंक्ति आप read_file
के सामने grep
उपयोग के कुछ मान्यता की जरूरत है:
Tie::File
तुम क्या जरूरत है:
सार
# This file documents Tie::File version 0.98 use Tie::File; tie @array, 'Tie::File', 'filename' or die ...; $array[13] = 'blah'; # line 13 of the file is now 'blah' print $array[42]; # display line 42 of the file $n_recs = @array; # how many records are in the file? $#array -= 2; # chop two records off the end for (@array) { s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file } # These are just like regular push, pop, unshift, shift, and splice # Except that they modify the file in the way you would expect push @array, new recs...; my $r1 = pop @array; unshift @array, new recs...; my $r2 = shift @array; @old_recs = splice @array, 3, 7, new recs...; untie @array; # all finished
IMHO 'टाई :: फ़ाइल' एक फ़ाइल को पढ़ने और सामग्री को सरणी में रखने के लिए एक साधारण कार्य के लिए एक ओवरकिल है। – dgw
[टाई :: फ़ाइल] (http://p3rl.org/Tie::File) तब तक अधिक है जब तक कि आपकी फ़ाइल बहुत बड़ी न हो। –
वहाँ सबसे आसान तरीका, File::Slurp
मॉड्यूल का उपयोग कर रहा है।
उदाहरण के लिए, फिल्टर लाइनों जो केवल पूर्णांकों होते हैं:
my @lines = grep { /^\d+$/ } read_file("filename", chomp => 1);
वास्तव में नहीं। आप ** chomp ** भूल गए हैं। शायद यह बेहतर काम करेगा: मेरा @data = map {chomp $ _; $ _} read_file ("फ़ाइल नाम"); –
पहले मैंने ध्यान नहीं दिया था, फ़ाइल की प्रत्येक पंक्ति में एक संख्या होती है। इसलिए, 'chomp' के बजाय' map' में संख्याओं के लिए रेगेक्स डालना बेहतर होगा। अपडेट किया गया। – Taras
पहले। अगर किसी को वास्तव में chomp() की आवश्यकता है तो मानचित्र के बजाय read_file ("filename", chomp => 1) विकल्प का उपयोग करें। दूसरा। मुझे नहीं लगता कि किसी को वास्तव में एक सत्यापन की जरूरत है। सवाल यह नहीं है कि फ़ाइल से संख्याओं को कैसे पढ़ा जाए। तीसरा। आप 3.1415 जैसी संख्याओं की जांच नहीं करते हैं। आगे। आप शायद मानचित्र के बजाय grep {/^\ d + /} का उपयोग करना चाहते हैं। –
मुझे पसंद है ...
@data = `cat /var/tmp/somefile`;
यह दूसरों के रूप में के रूप में आकर्षक नहीं है, लेकिन, यह सब एक ही काम करता है। और ...
$todays_data = '/var/tmp/somefile' ;
open INFILE, "$todays_data" ;
@data = <INFILE> ;
close INFILE ;
चीयर्स।
आपको रिटर्न वैल्यू की जांच करके या ऑटोडी का उपयोग करके 'ओपन' असफल होने के लिए केस को वास्तव में संभालना चाहिए। सही तरीके से सही होने के लिए आपको 'करीबी' के लिए भी ऐसा ही करना चाहिए। – zgpmax