[Bioperl-l] perl one-liner with Bio::SeqIO
Stefan Kirov
stefan.kirov at bms.com
Thu Jul 22 15:37:18 EDT 2010
Chris,
I tested tell and for me it actually returns the correct position. I think
seek($fh, $start_pos, 0) || $self->throw("Failed resetting the filehandle pointer; IO
error occurred");
might be better.
On 7/22/2010 2:35 PM, Chris Fields wrote:
> It's fairly easy to check if something is seekable, using tell() (from perldoc -f tell):
>
> tell() on pipes, fifos, and sockets usually returns -1.
>
> My guess is this is something that should be really be handled by Bio::Root::IO, then SeqIO could check this:
>
> if (!$self->seekable) {
> #die a horrible death
> }
>
> chris
>
> On Jul 22, 2010, at 12:51 PM, Stefan Kirov wrote:
>
>
>> Sorry for copying you all, but my posts to bioperl list do not go through (my headers seem suspicious).
>> I proposed (comment on the bug) that seek throws an IO error, I think this would be good practice in general (device gets disconnected, etc.)
>> I agree with Aaron that one option would be that if STDIN is the input format MUST be specified or parser dies.
>> Another option is to right to a temp file or slurp into memory. This could be dangerous though...
>>
>> On 7/22/2010 1:15 PM, Aaron Mackey wrote:
>>
>>> You cannot seek on a pipe, unfortunately. SeqIO should probably try to detect this, and die rather than invoking GuessSeqFormat.
>>>
>>> -Aaron
>>>
>>> On Thu, Jul 22, 2010 at 10:30 AM, Stefan Kirov<stefan.kirov at bms.com<mailto:stefan.kirov at bms.com>> wrote:
>>>
>>> From what I see in /bioperl-live/Bio/Tools/GuessSeqFormat.pm
>>>
>>> if (defined $self->{-file}) {
>>> # Close the file we opened.
>>> close($fh);
>>> } elsif (ref $fh eq 'GLOB') {
>>> # Try seeking to the start position.
>>> >>> seek($fh, $start_pos, 0);
>>> } elsif (defined $fh&& $fh->can('setpos')) {
>>> # Seek to the start position.
>>> $fh->setpos($start_pos);
>>> }
>>> return ($done ? $fmt_string : undef);
>>>
>>> seek($fh, $start_pos, 0); does not reset as expected- tell $fh
>>> after reset is where the second non-null line starts.
>>> I am not sure why- all manuals claim this should work?
>>> Hope this helps.
>>> Stefan
>>>
>>> On 7/22/2010 9:27 AM, Chris Fields wrote:
>>>
>>> cat test.fa | perl -MBio::SeqIO -e 'my $seq=Bio::SeqIO->new(-fh
>>> >>> =>\*STDIN); while ($myseq=$seq->next_seq){ print
>>> >>> $myseq->id,"\t",$myseq->seq,"\n"}
>>>
>>>
>>>
>>> _______________________________________________
>>> Bioperl-l mailing list
>>> Bioperl-l at lists.open-bio.org<mailto:Bioperl-l at lists.open-bio.org>
>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>
>>>
>>>
>> <stefan_kirov.vcf>
>>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stefan_kirov.vcf
Type: text/x-vcard
Size: 207 bytes
Desc: not available
URL: <http://lists.open-bio.org/pipermail/bioperl-l/attachments/20100722/3e479cfe/attachment-0002.vcf>
More information about the Bioperl-l
mailing list