"Sudarsan Raghavan" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > > > Patrick Bateman wrote: > > > Hi everyone > > > > Need help with this please, pretty please!! > > > > I open a file containing this: > > e.g. > > John:1111111:0 > > Peter:2222222:0 > > Jane:3333333:0 > > > > Now I select a particular name from an input. > > Now comes the part I'm having trouble with. For that name I've selected how > > do I increment the count value. > > e.g. > > If I select Peter then file is modified to this: > > John:1111111:0 > > Peter:2222222:1 > > Jane:3333333:0 > > > > and so on.... > > Heres the sub routine that needs to be fixed.... > > > > sub FIND { > > open (FIND, "prac1.txt") or die "$! file error" > > > > > #open file > > > > while (<FIND>) { > > ($name, $phone, $count) = split(/:/, $_); > > #separate values > > if ($name =~ $compare[1]) > > { #compare name > > value with input > > print "$phone\n"; > > #display phone number for that name > > close FIND; > > open (APPEND, ">>prac1.txt") or die "$! file error"; > > #increment count value for that name, > > $count++; > > #and substitute it with original count. > > substitute APPEND $count; > > This will write Peter:......:1 to the end of the file not in it's original > location. You will end up with > John:....:0 > Peter:......:0 > Jane:.....:0 > Peter:......:1 > > You will have to open a temporary file, write the modified contents to it > and rename it back > to the original file name. You will subroutine will end up like > > open (FIND, "prac1.txt") or die "Error Message"; > open (TMPFIND, ">prac1.txt.tmp") or die "Error Message"; > > while (<FIND>) { > chomp; > my ($name, $phone, $count) = split (/:/); > $count++ if ($name eq $compare[1]); #Assuming $compare[1] contains the > input name > print TMPFIND join (':', $name, $phone, $count), "\n"; > } > close (FIND); > close (TMPFIND); > rename ("prac1.txt", "prac1.txt.old"); > rename ("prac1.txt.tmp", "prac1.txt"); > > > > > close APPEND; > > } > > } > > }
Thanks for the help!! Unfortunetly this solution only copies the modified line to the tmp file. I need the all the other data to stay unchanged. e.g. John:1111111:0 Peter:2222222:0 Jane:3333333:0 becomes John:1111111:0 Peter:2222222:1 #where peter is the name called in the input Jane:3333333:0 Thanks anyway! Patrick Bateman > > > > -- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]