Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Data extraction from text file

by blindluke (Friar)
on Aug 09, 2011 at 10:25 UTC ( #919450=note: print w/ replies, xml ) Need Help??


in reply to Data extraction from text file

This should extract your data, if I understand your input file format correctly (please, read the links that were kindly provided to you and format the post before you post it).

#!/usr/bin/perl -w use strict; my @records; my %record; my $recordinprogress = 0; while (<>) { if (/-------/) { if ($recordinprogress) { push @records, { %record }; %record = (); $recordinprogress = 1; } } elsif (/([^:]+): (.*)/) { $recordinprogress = 1; $record{$1} = $2; } }

The code above, when used on your data, produces the following array of hashes:

$VAR1 = [ { 'phone no' => '34738472 ', 'url' => 'www.google.com ', 'name' => 'Umesh ', 'address' => 'New Delhi ', 'room no' => '001 ' }, { 'phone no' => '', 'url' => 'www.yahoo.com ', 'name' => 'Raj ', 'address' => 'Sahadara ', 'room no' => '002 ' }, { 'phone no' => '84398419 ', 'url' => 'www.rediff.com ', 'name' => 'Hem ', 'address' => 'mumbai ', 'room no' => '003 ' }, { 'phone no' => '', 'url' => 'www.google.com ', 'name' => 'Mukesh ', 'address' => '', 'room no' => '004 ' }, { 'phone no' => '4814314783 ', 'name' => 'abcxyz ', 'address' => '', 'room no' => '' }, { 'phone no' => '', 'name' => 'Rakesh ', 'address' => 'jrieiqrjqq ', 'room no' => '' } ];

Now, it's up to you to print it out. I suggest using CSV if you want to import the data to an application like Gnumeric or Excel.

If you have any further questions, show something that you managed to do. You'll find many Monks willing to help you, but that does not mean someone will do everything for you.


Comment on Re: Data extraction from text file
Select or Download Code
Re^2: Data extraction from text file
by Eliya (Vicar) on Aug 09, 2011 at 11:49 UTC

    Alternatively, you could set the input record separator ($/) to "-------", which simplifies things a bit:

    $/ = "-------\n"; my @records; while (<>) { my @entries = map { /([^:]+):\s*(.*)/ } split /\n/; push @records, { @entries } if @entries; }

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (9)
As of 2014-12-25 05:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (159 votes), past polls