Solved

Limit to 3 digit codes.. in the following script.

Posted on 2001-06-12
4
177 Views
Last Modified: 2010-03-05
Hi, Sapa wrote this great script to create .txt files from a list of other files. I need to limit the output files to only 3 letter.txt codes.

Any ideas Sapa?

Regards,
Geoff

#!/usr/bin/perl -w
use strict;

my $indir='/var/www/html/silicon/daily';
my $outdir='/var/www/html/silicon/codes';
my $maxdate;
       
if($ARGV[0]) {
   $maxdate=($ARGV[0]=~/^[0-3]/)?"20$ARGV[0]":"19$ARGV[0]";
}
       
my %data;
opendir(D,$indir) or die "opendir: $!";
while(my $fname=readdir(D)) {
   $fname=~/^as(\d{6})\.txt$/i or next;
   my $date=$1;
   # Convert to 8-digit date and fix Y2K problem
   $date=($date=~/^[0-3]/)?"20$date":"19$date";
   
   next if $maxdate && $maxdate < $date;
       
   open(F,"<$indir/$fname") or next;
   while(<F>) {
       chomp;
       /^(\w+)\s*,(.*)/ or next;
       my ($code,$line)=($1,$2);
       $data{$code}||=[];
       push @{$data{$code}},[$date,$line];
   }
   close(F);
}

foreach my $code (keys %data) {
   open(F,">$outdir/$code.txt") or die "open: $!";
   my @sorted=sort { $a->[0] <=> $b->[0] } @{$data{$code}};
   foreach (@sorted) {
       print F "$_->[1]\n";
   }
   close(F);
}
       
0
Comment
Question by:wapware
  • 2
4 Comments
 
LVL 8

Expert Comment

by:bebonham
ID: 6183811
are you saying it is possible to create a file called

"this.text" ?

it doesn't appear that that is possible.
0
 

Author Comment

by:wapware
ID: 6183833
No this script reads files all files in a directory called '/var/www/html/silicon/daily' named by date, for example as010613.txt and formated like this,

AAR   ,010612,0.020,0.020,0.020,0.020,28000,0
AAT   ,010612,0.540,0.540,0.510,0.520,603319,0
AAU   ,010612,0.870,0.900,0.870,0.900,2500,0
ABC   ,010612,0.530,0.550,0.530,0.550,125216,0
ABCG  ,010612,2.015,2.015,2.015,2.015,4964,0
ABG   ,010612,2.000,2.040,2.000,2.000,45974,0

To produce many txt files in the directory '/var/www/html/silicon/codes' of all the codes like

aar.txt

Formated like this;
010402,0.021,0.021,0.021,0.021,30000,0
010403,0.021,0.021,0.020,0.020,531499,0
010404,0.020,0.020,0.020,0.020,86501,0
010405,0.019,0.019,0.019,0.019,32790,0
010406,0.020,0.020,0.020,0.020,100000,0
010411,0.019,0.019,0.019,0.019,20000,0

But I Want to filter to only create txt files of the 3 digit codes.

Regards,
geoff

0
 
LVL 84

Accepted Solution

by:
ozo earned 50 total points
ID: 6183953
/^(\w{3})\s*,(.*)/ or next;
0
 

Author Comment

by:wapware
ID: 6183978
Works like a charm.

Thanks

Geoff
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now