हैं जो आपको सूची तर्क के साथ धक्का कहते हैं, आप ढेर बुद्धिमान फैशन में शेष सूची (ओं) के साथ पहली सूची जोड़ देते हैं। Perldoc पर पुश के बारे में पढ़ें। तो push(@table, @row);
का आपका कॉल अब @table
सूची बना रहा है, न कि दो आयामी सरणी।
आपको कई पोस्ट प्राप्त हुई हैं जो @row
के लिए एक संदर्भ संदर्भ को \@row
पंक्तियों की एक सूची बनायेगी, और वास्तव में यह काम करती है। मैं इसे थोड़ा अलग करता हूं।बेशक, पर्ल के साथ, ऐसा करने का हमेशा एक और तरीका है!
संवैधानिक रूप से, आप बहु आयामी सूची बनाने के लिए किसी सूची के स्केलर तत्व में अज्ञात सरणी संदर्भ को भी दबा सकते हैं। पर्ल में संदर्भों के बारे में जानने के लिए सबसे महत्वपूर्ण बात यह है: 1) वे एक स्केलर हैं और 2) वे पर्ल - कोड, सरणी, हैश, किसी अन्य संदर्भ में कुछ भी संदर्भित कर सकते हैं। Perl Ref Tutorial के साथ कुछ समय बिताएं और यह और अधिक स्पष्ट हो जाएगा। अपने कोड के साथ, बस उस तत्व के आस-पास [ ]
जोड़ें, जिसे आप अपनी सूची में दूसरा आयाम बनाना चाहते हैं, इसलिए push(@table, @row);
push(@table, [ @row ]);
होना चाहिए, उसी तरह, आप [ ]
को अपने विभाजन के आस-पास डाल दें ताकि यह push(@table, [ split(/\s*,\s*/, $_) ]);
हो जाए। यह एक साथ विभाजन और निर्माण करेगा परिणाम के लिए एक अज्ञात सरणी।
आपके पास जो विशिष्ट मुद्दा है, एक बहु आयामी सूची कैसे बनाएं और एक्सेस करें, टॉम क्रिस्टेंसेन के perllol tutorial में भी बहुत अच्छी तरह से इलाज किया जाता है आपके कोड के साथ आपके विशिष्ट मुद्दों के समाधान सीधे यहां निपटाए जाते हैं।
perllol में टॉम की उदाहरण से सटीक कोड के साथ अपने कोड नए सिरे से लिखना, यह इस हो जाता है:
#!/usr/bin/perl
use strict;
use warnings;
my (@row, @table, $n, $rowref);
while(<DATA>) {
chomp;
# regex to separate CSV (use of a cpan module for CSV STRONGLY advised...
@row = /(?:^|,)("(?:[^"]+|"")*"|[^,]*)/g;
for (@row) {
if (s/^"//) { s/"$//; s/""/"/g; }
}
push(@table, [ @row ]); #Note the [ ] around the list
}
# Now the table is created, print it:
my $rowcnt=0;
foreach $rowref (@table) {
print "row $rowcnt:\n";
$rowcnt++;
print " [ @$rowref ], \n";
}
# You can access the table in the classic [i][j] form:
for my $i (0 .. $#table) {
$rowref = $table[$i];
$n = @$rowref - 1;
for my $j (0 .. $n) {
print "element $i, $j of table is $table[$i][$j]\n";
}
}
# You can format it:
for my $i (0 .. $#table) {
print "$table[$i][0] $table[$i][1]\n";
print "$table[$i][2]\n";
print "$table[$i][3], $table[$i][4] $table[$i][5]\n\n";
}
__DATA__
Mac,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""Joan, the bone""",Jett,"9th, at Terrace plc",Desert City,CO,0
+1 को छोड़ते हुए से हर किसी का समय बर्बाद कर नहीं करने के लिए 'सख्त का उपयोग करें; चेतावनियों का प्रयोग करें; '। – Ether
आपको वास्तव में 2 तर्क 'ओपन' से बचना चाहिए। इसमें कई समस्याएं हैं जो टालने के लिए सर्वोत्तम हैं (चर्चा के लिए इस 2001 के पोस्टमोनक्स पोस्ट देखें: http://www.perlmonks.org/?node_id=131085) इस एसओ पोस्ट को लेक्सिकल हैंडल पर जानकारी के लिए देखें: http: // stackoverflow .com/प्रश्न/613906/क्यों-करता-प्रोग्रामिंग-perl-use-local-not-my-for-filehandles – daotoad
देखें ['perldoc perllol'] (http://perldoc.perl.org/perllol.html#Access -और-प्रिंटिंग) - एक्सेसिंग और प्रिंटिंग – Zaid