# Why not ... while( <INFILE> ) { @tmp = split( /\|/ ); if (exists $freq{$tmp[$table]}) { $freq{$tmp[$table]}++ } else { $freq{$tmp[$table]}=1 } $tot ++ } ----- Original Message ----- From: "Balint, Jess" <JBalint@alldata.net> To: <beginners@perl.org> Sent: Thursday, January 31, 2002 6:45 PM Subject: More Economic Use of Hash > I am attemping to create a frequency chart based on a pipe delimited > database output. Following is what I have come up with. The hash create from > this is then output to another file. It seems to be very slow on files in > excess of ~10000 lines. This will be used on ~500000 line files and needs to > be a proficient as possible. If anyone knows a better way to do this, it > would be extremely helpful. Thank you. -Jess > > $table is the number of the field which the frequency will be calculated on. > ex. a|b|c|d| if $table = 3 then c will be used > @tmp is the split array of the line input > %freqidx is the hash with fields values as keys and frequency counts > $tot is for percentage calculation after this loop. this is basically an > INFILE line count > > while( <INFILE> ) { > @tmp = split( /\|/ ); > $x = 0; > foreach( keys( %freqidx ) ) { > if( $tmp[$table] ne $_ ) { > $x = 1; > } else { > $x = 0; > last; > } > } > if( $x == 1 ) { > $freqidx{$tmp[$table]} = 0; > } > $freqidx{$tmp[$table]}++; > $tot++; > } > > -- > To unsubscribe, e-mail: beginners-unsubscribe@perl.org > For additional commands, e-mail: beginners-help@perl.org > > > >Thread Previous