On Jun 16, 9:33 pm, [EMAIL PROTECTED] (Rob Dixon) wrote:
> Dermot wrote:
> > Hi All,
>
> > I have data in a tab delimited format like this (tabs might be lost in
> > the formatting of the email).
>
> > A456/959 ScHe
> > M920/1123 He
> > D123/999 ChFl
> > D123/949 AnFl
> > S520/257 Sp
> > T510/106 TePeHe
> > T540/110 Te
> > T875/1010 TeSc
> > T875/1050 TeSc
>
> > I need to split the 2nd column. The string is to be split into 2
> > characters , so ChFl becomes 'Ch, Fl' . I can't seem to find a RE that
> > will split the data correctly. My best effort is below but is captures
> > everything into $f[0], there is no splitting at all. I also tried my
> > hand at a recursive subroutine but that caused a lot deep recursion
> > errors.
>
> > Can anyone offer a bit of advise here?
> > Thanx,
> > Dp.
>
> > #!/bin/perl
>
> > use strict;
> > use warnings;
> > use Text::Tabfile;
>
> > my $file = 'myfile.txt';
> > my $tabfile = new Text::TabFile;
> > $tabfile->open($file);
>
> > my @headers = $tabfile->fields;
>
> > while (my $row = $tabfile->read) {
> > my $str = $row->{'code'};
> > my @f = split(/(?=\b[A-Z][a-z]\b)/, $str);
> > print qq($row->{'number'}, "$f[0]" "$str"\n");
>
> > #print $row->{'number'},"\t";
> > #for (@f) {
> > # print $_,',';
> > #}
> > #print "\n";
> > }
>
> I think you are better off using a simple global regex match Dermot.
>
> my @f =$str =~ /[A-Z][a-z]+/g;
>
> That finds all instances of a capital letter followed by one or more lower
> case
> letters.
>
> HTH,
>
> Rob- Hide quoted text -
>
> - Show quoted text -
U can use:
while(<FH>) {
if ($_ =~ /(.*?)(\t)(\w{2})(.*)/){
print "$3\n";
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/