Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: parse array to replace specific spaces with pipes

by Polyglot (Pilgrim)
on Jul 09, 2009 at 23:41 UTC ( #778734=note: print w/replies, xml ) Need Help??

in reply to parse array to replace specific spaces with pipes

$sth->execute; open (OUTFILE, "> file.txt") or die "Cant open dat file : $!"; while (@row = $sth->fetchrow_array) { $_ =~ s/\s/\|/g; $_ =~ s/(.*)/|$1|/; print OUTFILE "@row\n"; } close OUTFILE;
Does that fix it?



UPDATE: Elisheva has given a better answer. My answer assumes that the data was read from a file, one line at a time. Her answer recognizes that each of the parts of the line have not been read in together, but rather individually as separate records, such as from a database. I had thought your difficulty was in not seeing the pipe at the beginning and end of the line, but if indeed you were not seeing any pipes at all, then her answer will give the proper approach.

Replies are listed 'Best First'.
Re^2: parse array to replace specific spaces with pipes
by neurotoxx (Novice) on Jul 10, 2009 at 16:27 UTC

    That is correct. I did some more reading on arrays last night and now I understand how the data structure is different from scalar data. I did use your search expression, and it works great. Thank you very much, -Neurotoxx

Re^2: parse array to replace specific spaces with pipes
by neurotoxx (Novice) on Jul 12, 2009 at 21:23 UTC

    Thanks. The regex expressions work great. However, I have a couple more issues with the data. For example, I would like to replace only the spaces after the first element and before the last element. I need to keep the spaces that are part of the last name. For example:

    0211121253 Mike Dell ID06533 0211121253 Leo De Vinci ID02014 0211121253 Joe De La Marco ID65255

    Should look like this:

    0211121253|Mike|Dell|ID06533 0211121253|Leo|De Vinci|ID02014 0211121253|Joe|De La Marco|ID65255

    Also, I would like it to delete any lines that are missing field elements.

    0211121253|Mike|Dell|ID06533 Missing data|Leo|De Vinci|ID02014 <--delete line 0211121253|Joe|De La Marco|ID65255

    I have been trying to create a regex that keys on "ID" and replaces the space before it. I've been trying these:

    $_ =~\b\sID\d; $_ =~^\d+;

    But these expressions replace instead of add the pipe.

    I would really appreciate a way to add the pipes and not replace the search value in the regex.

    Thank you so much for your help,


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://778734]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2018-03-25 00:36 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (299 votes). Check out past polls.