Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86. , wwwxxx vim, mysql closing table and opening table, 800c5000, setgid operation not permitted, pciehp: acpi_pciehprm on IBM, WWWXXX.DBF, 078274121, info0a ip, should prodicers of software_based services be held liable or not liable for economic injuries

Links

XODOX
Impressum

#1: Re: first perl script...help anyone?

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

Meriadoc Overhill of Nobottle wrote:
> HI all,

Hello,

> 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.

Welcome.

> 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.

#!/usr/local/bin/perl
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.


John
--
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: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message