Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

wwwxxxapc, wwwxxxapc, wwwxxxapc, sslengine vs sslproxyengine, WWWXXXAPC, ftp_get() 'RETR' not understood , wwwxxxdoco, wwwxxxdoco, wwwxxxdoco, WWWXXXAPC



#1: Re: first perl anyone?

Posted on 2008-04-16 04:50:41 by krahnj

Meriadoc Overhill of Nobottle wrote:
> HI all,


> I.m very new to Perl, but I've been told it's such a powerful language
> for text processing I wanted to try it and learn. So, I'm writing my
> first script which I need to process some text file.


> Basically that's what I want to do: I have 3 files, I want to read
> some informations from the first 2, and then write on the third. In
> depth, I want to read every line from the first and retrieve that line
> (or part of it) in a line of the second. Now, in the second file, I
> want to read all the lines subsequent to the line retrieved untile a
> termination charachter is found (in my case, when a line equal to the
> dot (".") is met) and print some infos in third. I want to repeat the
> operation until all the lines from the first line are ended.
> That's what I wrote, but it doesn't work, in particular the variable
> $count is always equal to 1. THat means it's not reading oll the lines
> from the first file.
> !/usr/local/bin/perl -w

The first two characters (at least on *nix systems) have to be '#!'.
And that line should be followed by the warnings and strict pragmas.

use warnings;
use strict;

> open(FILEWRITE, ">write_seg06091999.txt")|| die "Could not open
> $write_seg06091999.txt\n";
> #open(FILESEG, "seg06091999.txt")|| die "Could not open
> $seg06091999.txt\n";
> #open(FILEALIGN, "walign06091999.txt")|| die "Could not open
> $walign06091999.txt\n";
> open(FILESEG, "seg_short.txt")|| die "Could not open seg_short.txt\n";
> open(FILEALIGN, "align_short.txt")|| die "Could not open align-
> short.txt\n";

You should include the $! variable in the error messages so you know why
open failed.

perldoc perlvar

> $count = 1;
> my $line_align = " ";
> ## read every line of a file
> while ($line_seg = <FILESEG>) {
> while($line_align = <FILEALIGN>){

When you read the first line via <FILESEG> you then read through the
entire second file so when you get to the second and every subsequent
line from <FILESEG> this loop will be bypassed as <FILEALIGN> will
always return undef.

> if($line_align =~ /19990609_1900_1920_inter_fm_dga.$count/){

In a regular expression the character '.' means that you want to match
any character at that position. If you want to match a literal '.'
character you have to escape it /\./. The end of the pattern is not
anchored so if $count contains '1' then it will also match '10', '11',
'12345', etc.

> do{
> if($line_align ne "."){
> $line_align = <FILEALIGN>;
> print FILEWRITE $line_align, "$count\n";
> }
> }until $line_align eq ".";

Do you really need to check for $line_align being equal to '.' twice in
the same while loop?

> last;
> }
> }
> $count = $count+1;
> }
> you have some ideas why it's not working?
> probably ny programming style and my explantion sucks, so feel free to
> ask for more clear explanations...

It would help if we could see what your data looks like.

Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall

To unsubscribe, e-mail:
For additional commands, e-mail:

Report this message