Hi,

If you have time, I will be very appreciate you helping transform below code.

I have just uploaded the whole files into the following link:

https://docs.google.com/open?id=0B93SVRfpVVg3QzdsYUNkOU5SSHEtOTlqVm54WUdjdw

can run with perl extractbib.pl sample.tex

#!/usr/bin/env perl

use strict;
use warnings;
use Carp qw(croak);
use autodie qw(open close);
use File::Basename;
use List::MoreUtils qw(uniq);


croak "Usage: ./bibextract.pl tex_file.tex" unless defined $ARGV[0];

my $infile = $ARGV[0];

my $tex_file = $infile;
#my $bib_filename = "/home/lina/texmf/bibtex/bib/biophymd.bib";
my $bib_filename = "try.bib";
my $bib_abbrev_filename = "/home/lina/texmf/bibtex/bib/biophyabbrev.bib";
my $extracted_bib = basename("$infile",".tex");
   $extracted_bib .= "\.bib";

my $cited;
my @citeditems;
my @uciteditems;
my @items;
my $item;
my $reg ;
my $section_tex;
my $time = localtime;

open my $fho,'>',$extracted_bib;
## write some forewords to the output file, namely $extracted_bib
my $forewords = <<END;
%% '$extracted_bib' BibTex file.
%% generated with 'bibextract' on $time
%%
END
print $fho $forewords;

## read the bib abbrevision and save it to $extracted_bib file.


open my $fh4,'<',$bib_abbrev_filename;
while(<$fh4>){
        if (/^\@STRING\{/){
                print $fho $_;
        }
}


## read all the cited items from  input.tex file and save it to @citeditems

read_tex($tex_file);

open my $fh3, '<',$tex_file;
while (my $line = <$fh3>){
        if($line =~ /include\{(.+)\}/){
                $section_tex = $1;
                $section_tex .="\.tex";         
                
                read_tex($section_tex);
                
        }
}
close($fh3);


sub read_tex{
        open my $fh, '<', @_;
        while(<$fh>){
                if(/cite\{(.+?)\}/){
                push @citeditems,split/,/,$1;
                }
        }
        close($fh);
}

## read the .bib database and extract the cited out

@uciteditems = uniq @citeditems;
foreach $item (@uciteditems){
        match($item);
        }
        

sub match{

        open my $fh2, '<', $bib_filename;

        LINE: while(my $line = <$fh2>){

                if ($line =~ m/@_\,/ .. $line =~ /^\}$/){
                        print $fho $line;
                #last;
                }
        

        }
        close($fh2);
}

close($fho);

With all the best regards,

lina

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to