in reply to read text table

ctilmes, I have found a small problem in the code that when there is an empty entry for a field it misses it and gets the next entry in the table for that field. Like in first line it will give me mon for SERVICE field. Do you have idea to solve this?

+---------------+ | Bus Timetable | +---------------+----+-----------------+------------+------+ | BUS SERVICE DAY tm | FROM DEPT | TO ARR | 24/7 | +--------------------+-----------------+------------+------+ | C4 mon 15 | twn 0900 | Apt 1011 | yes | | intl mon | LoDoN 1000 | XTR 1426 | | | B2 sussex 20 | cly 1034 | brgtn 1118 | no | | A0 | manchester 1212 | xxx xxxx | xxx | +--------------------+-----------------+------------+------+

Replies are listed 'Best First'.
Re: Re: read text table
by Anonymous Monk on Oct 20, 2003 at 19:04 UTC
    Hello Kwun,

    The following code will work PROVIDED there is always an entry in the FROM, DEPT, TO, ARR fields. It looks for the second pipe symbol, (|), and gets the rest of the line after it. Hope this helps.

    Chris

    #!/usr/bin/perl use strict; use warnings; while (<DATA>) { next unless /Bus Timetable/; <DATA> for 1..3; my $line; until (($line = <DATA>) =~ /^\+/) { # Find index of the first '|' after the first one. my $idx = index($line, "|", 1); # From that position (+2), capture the remaining string $line = substr($line, $idx+2); # Remove the '|' characters $line =~ s/\|//g; # Capture the first four fields my ($fr, $dep, $to, $arr) = split ' ', $line; print "$fr$dep:$to$arr\n"; } } __DATA__ ---TEXT BEFORE--- +---------------+ | Bus Timetable | +---------------+----+------------+-----------+------+ | BUS SERVICE DAY tm | FROM DEPT | TO ARR | 24/7 | +--------------------+------------+-----------+------+ | C4 metro mon 15 | twn 0900 | Apt 1011 | yes | | C6 intl mon 45 | LDN 1000 | XTR 1426 | no | | B2 susx mon 20 | cly 1034 | btn 1118 | no | | A0 xxxxx xxx xx | xxx xxxx | xxx xxxx | xxx | +--------------------+------------+-----------+------+ ---TEXT AFTER--- +---------------+ | Bus Timetable | +---------------+----+-----------------+------------+------+ | BUS SERVICE DAY tm | FROM DEPT | TO ARR | 24/7 | +--------------------+-----------------+------------+------+ | C4 mon 15 | twn 0900 | Apt 1011 | yes | | intl mon | LoDoN 1000 | XTR 1426 | | | B2 sussex 20 | cly 1034 | brgtn 1118 | no | | A0 | manchester 1212 | xxx xxxx | xxx | +--------------------+-----------------+------------+------+ **** RESULTS ******* *********************** twn0900:Apt1011 LDN1000:XTR1426 cly1034:btn1118 xxxxxxx:xxxxxxx twn0900:Apt1011 LoDoN1000:XTR1426 cly1034:brgtn1118 manchester1212:xxxxxxx