Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re^2: REGEX omit dashes - simple but ...

by wrkrbeee (Scribe)
on Apr 04, 2016 at 17:09 UTC ( #1159513=note: print w/replies, xml ) Need Help??

in reply to Re: REGEX omit dashes - simple but ...
in thread REGEX omit dashes - simple but ...

Thanks toolic! Are you defining the variable as a string rather than a numeric? Thanks!
  • Comment on Re^2: REGEX omit dashes - simple but ...

Replies are listed 'Best First'.
Re^3: REGEX omit dashes - simple but ...
by CountZero (Bishop) on Apr 04, 2016 at 17:13 UTC
    Not that it really matters, but 0001144204-09-017358 is not a number but a string.


    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

    My blog: Imperial Deltronics
Re^3: REGEX omit dashes - simple but ...
by kennethk (Abbot) on Apr 04, 2016 at 17:14 UTC

      Thanks guys, here's the revised statement, along with the result: if($line=~m/^\s*ACCESSION\s*NUMBER:\s*/m){$access_num=$1; $access_num =~ tr/-//d;} Result is the error message stating "Use of uninitialized value ...." ?? Thanks!!!

        You forgot to add your capture group of (\d*). However, that won't really help, as that won't capture your - (dashes), or any numbers after it.

        Why don't you show us a few lines of example data you're trying to match?

        Also, Use of uninitialized... is not an error, it's a warning. It's most likely saying that $1 is uninitialized (because you didn't capture anything).

        You are getting an uninitialized error because you are trying to change the content of $access_num, to which you've assigned $1, but there were no parentheses in your first regular expression. Maybe you mean something like:
        if ($line =~ s/^\s*ACCESSION\s*NUMBER:\s*/) { $line =~ tr/-//; }
        or possibly
        if ($line =~ s/^\s*ACCESSION\s*NUMBER:\s*([-\d]+)$/m) { $access_num = $1; $access_num =~ tr/-//; }

        #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

      Examples of the input data: 0001144204-09-017358 0001144204-10-065610 0001042167-15-000175 0000053669-16-000051 Thanks!

        If you get the strings like you say are there, then you can use them as numbers. In Perl, you don't have to call a function to convert a string to a number, if that string is a number, you can just use it like one. Here I just added 10 to the "string" to show that feature. Of course once "$string" is a "number", leading zero'es are suppressed unless you use some kind of printf statement to add them back into the printout. A common idiom to suppress leading zeroes is $number_string+=0;
        #!usr/bin/perl use warnings; use strict; my @input = qw /0001144204-09-017358 0001144204-10-065610 0001042167-15-000175 0000053669-16-000051 /; foreach my $string (@input) { $string =~ tr/-//d; print "string = $string\n"; print "string +10 as number: ", $string + 10,"\n"; } __END__ prints: string = 000114420409017358 string +10 as number: 114420409017368 string = 000114420410065610 string +10 as number: 114420410065620 string = 000104216715000175 string +10 as number: 104216715000185 string = 000005366916000051 string +10 as number: 5366916000061
        Update: I ran this on Win XP, 32 bit.
        normally, 2,147,483,647 would be max int, but Perl 5.22 was able to get 104,216,715,000,185 from the addition.
        Those are the strings you are transforming, but it looks like you are struggling on extracting the your lines. What do your literal lines look like?

        #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1159513]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (2)
As of 2023-06-06 18:49 GMT
Find Nodes?
    Voting Booth?
    How often do you go to conferences?

    Results (29 votes). Check out past polls.