Solved

map

Posted on 2006-06-21
206 Views
I have
\$output = "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

how can i grep only the 5 digits and save it in array @codeword

can i do using map?
0
Question by:perlperl
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

Author Comment

ID: 16954737
i tired

@output = split (/ /, \$output);
my @codeword = map { /(X\d{5})/ } @output;

teh output i get, is
234567 234568 234562 234561 234533 234522

0

Author Comment

ID: 16954742
sorry the output was
123456 234567 234568 234562 234561 234533 234522

it skips the first element forn second row onwards
0

LVL 37

Accepted Solution

Harisha M G earned 500 total points
ID: 16954849
Hi,

try

@output = split (/\s/, \$output);

---
Harish
0

Author Comment

ID: 16954893
if i try  \s

teh output i get is
234567 234568  123452 234562 234561 1231422 234533 234522

i get everything except the first elemnt 123456

just clarification, i m using
my @codeword = map { /(X\d{6})/ } @output;

there was typo above where i specified 5
0

Author Comment

ID: 16954900
this worked fine but i don't like this format

@output = split(/\n/,\$output);
for(\$i = 0; \$i < @output; \$i++) {
@code = split(/ /, \$output[\$i]);
@c = map { /(X\d{6})/ } @code;
@subset_ucode = ( @subset_ucode ,@c);
}
print "@subset_ucode \n";
0

LVL 37

Expert Comment

ID: 16954918
I got this:
X12345 X23456 X23456 X12345 X23456 X23456 X12342 X23453 X23452

the code was:

\$output=  "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

@output = split (/\s/, \$output);
@codeword = map { /(X\d{5})/ } @output;

print "@codeword";

If you want the digits, then change

@codeword = map { /(X\d{5})/ } @output;

to

@codeword = map { /X(\d{5})/ } @output;
0

Author Comment

ID: 16954938

that works
0

Author Comment

ID: 16954945
why \s worked.
can u pls explain
0

LVL 37

Expert Comment

ID: 16954949
\s means whitespace. It includes space, tab and newline character
0

Author Comment

ID: 16954958
Got it!!!

Thanks a lot
0

LVL 8

Expert Comment

ID: 16955028
\$output = "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

@codeword = \$output =~ /(\d+)/g;

print "@codeword";

0

LVL 84

Expert Comment

ID: 16965246
what exactly do you want in @codeword?  you say you want only the 5 digits, but everything in \$output  looks like it has 6 digits
0

Featured Post

Question has a verified solution.

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

Email validation in proper way is  very important validation required in any web pages. This code is self explainable except that Regular Expression which I used for pattern matching. I originally published as a thread on my website : http://wwwā¦
I have been pestered over the years to produce and distribute regular data extracts, and often the request have explicitly requested the data be emailed as an Excel attachement; specifically Excel, as it appears: CSV files confuse (no Red or Green hā¦
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ā¦
Six Sigma Control Plans
Suggested Courses
Course of the Month4 days, 4 hours left to enroll