मैं पर्ल के लिए अपेक्षाकृत नया हूं और मैं इस परियोजना में आया हूं कि मुझे थोड़ा कठिन समय है। प्रोजेक्ट का ऑब्जेक्ट दो सीएसवी फाइलों की तुलना करना है, जिनमें से एक में $ नाम, $ मॉडल, $ संस्करण और दूसरा होगा जिसमें $ name2, $ डिस्क, $ संग्रहण अंत में होगा परिणाम फ़ाइल में उस मिलान वाली रेखाएं होंगी और इस तरह की जानकारी को एक साथ रखेगी: $ नाम, $ मॉडल, $ संस्करण, $ डिस्क, $ संग्रहण।एक सरणी में एक रेखा को छोड़कर, पर्ल
मैंने ऐसा करने में कामयाब रहा है, लेकिन मेरी समस्या यह है कि जब प्रोग्राम गायब होने में तत्वों में से एक तोड़ता है। जब फ़ाइल में एक रेखा से गुज़रना पड़ता है तो वह उस रेखा पर रुक जाता है। मैं इस समस्या को कैसे ठीक करुं? कोई सुझाव या तरीका यह है कि मैं इसे कैसे उस रेखा को छोड़ सकता हूं और जारी रख सकता हूं?
यहाँ मेरी कोड है:
open(TESTING, '>testing.csv'); # Names will be printed to this during testing. only .net ending names should appear
open(MISSING, '>Missing.csv'); # Lines with missing name feilds will appear here.
#open (FILE,'C:\Users\hp-laptop\Desktop\file.txt');
#my (@array) =<FILE>;
my @hostname; #stores names
#close FILE;
#***** TESTING TO SEE IF ANY OF THE LISTED ITEMS BEGIN WITH A COMMA AND DO NOT HAVE A NAME.
#***** THESE OBJECTS ARE PLACED INTO THE MISSING ARRAY AND THEN PRINTED OUT IN A SEPERATE
#***** FILE.
#open (FILE,'C:\Users\hp-laptop\Desktop\file.txt');
#test
if (open(FILE, "file.txt")) {
}
else {
die " Cannot open file 1!\n:$!";
}
$count = 0;
$x = 0;
while (<FILE>) {
($name, $model, $version) = split(","); #parsing
#print $name;
chomp($name, $model, $version);
if (($name =~ /^\s*$/)
&& ($model =~ /^\s*$/)
&& ($version =~ /^\s*$/)) #if all of the fields are blank (just a blank space)
{
#do nothing at all
}
elsif ($name =~ /^\s*$/) { #if name is a blank
$name =~ s/^\s*/missing/g;
print MISSING "$name,$model,$version\n";
#$hostname[$count]=$name;
#$count++;
}
elsif ($model =~ /^\s*$/) { #if model is blank
$model =~ s/^\s*/missing/g;
print MISSING"$name,$model,$version\n";
}
elsif ($version =~ /^\s*$/) { #if version is blank
$version =~ s/^\s*/missing/g;
print MISSING "$name,$model,$version\n";
}
# Searches for .net to appear in field "$name" if match, it places it into hostname array.
if ($name =~ /.net/) {
$hostname[$count] = $name;
$count++;
}
#searches for a comma in the name feild, puts that into an array and prints the line into the missing file.
#probably won't have to use this, as I've found a better method to test all of the feilds ($name,$model,$version)
#and put those into the missing file. Hopefully it works.
#foreach $line (@array)
#{
#if($line =~ /^\,+/)
#{
#$line =~s/^\,*/missing,/g;
#$missing[$x]=$line;
#$x++;
#}
#}
}
close FILE;
for my $hostname (@hostname) {
print TESTING $hostname . "\n";
}
#for my $missing(@missing)
#{
# print MISSING $missing;
#}
if (open(FILE2, "file2.txt")) { #Run this if the open succeeds
#open outfile and print starting header
open(RESULT, '>resultfile.csv');
print RESULT ("name,Model,version,Disk, storage\n");
}
else {
die " Cannot open file 2!\n:$!";
}
$count = 0;
while ($hostname[$count] ne "") {
while (<FILE>) {
($name, $model, $version) = split(","); #parsing
#print $name,"\n";
if ($name eq $hostname[$count]) # I think this is the problem area.
{
print $name, "\n", $hostname[$count], "\n";
#print RESULT"$name,$model,$version,";
#open (FILE2,'C:\Users\hp-laptop\Desktop\file2.txt');
#test
if (open(FILE2, "file2.txt")) {
}
else {
die " Cannot open file 2!\n:$!";
}
while (<FILE2>) {
chomp;
($name2, $Dcount, $vname) = split(","); #parsing
if ($name eq $name2) {
chomp($version);
print RESULT"$name,$model,$version,$Dcount,$vname\n";
}
}
}
$count++;
}
#open (FILE,'C:\Users\hp-laptop\Desktop\file.txt');
#test
if (open(FILE, "file.txt")) {
}
else {
die " Cannot open file 1!\n:$!";
}
}
close FILE;
close RESULT;
close FILE2;
अगली बार कृपया अपने कोड में सख्त उपयोग करें, यह आपको परेशान करने वाली बग के लिए सुरक्षा देता है। –
कृपया 'सख्त उपयोग करें;', 'चेतावनियों का उपयोग करें;', अपने कोड को सही तरीके से इंडेंट करें, लेक्सिकल फाइलहैंडल्स के साथ खुले तर्क के संस्करण का उपयोग करें और सीखें कि सरणी फ़ंक्शंस ('पुश, मैप, grep') का उपयोग कैसे करें। – dgw
आप जो भी सामग्री अपने आप को पर्ल को पढ़ाने के लिए उपयोग कर रहे हैं, मैं दृढ़ता से उन्हें छोड़ने की सलाह दूंगा - आपका कोड टेम्पलेट्स पर आधारित है जो कि बहुत ही पुरानी (वैश्विक नामित फ़ाइल हैंडल, खुले 2-Arg फॉर्म) से सीधे गलत है। कृपया इसे व्यक्तिगत रूप से न लें - यह स्पष्ट रूप से आपकी गलती नहीं है, लेकिन आप स्पष्ट रूप से उपयोग करने के मुकाबले बहुत बेहतर और अधिक आधुनिक किताबों/ट्यूटोरियल/कोड उदाहरणों से सीखकर बहुत अच्छी तरह से सेवा करेंगे। – DVK