#!/usr/bin/perl -w

use POSIX;
use MARC::File::USMARC;
use MARC::Field;
use Getopt::Std;

$| = 1;

%options=();
getopts("n:",\%options);
$size = $options{n};
my $recnum = 0;
my $fileId = 0;
my $dir    = 0;
foreach my $file (@ARGV) {
#foreach my $file (<*.records>) {
  print "\nSplitting MARC file $file:\n";
  for (my $i=0; $i<ceil($recnum/25) && $recnum>0; $i++) {
    print " ";
  }
#  open textMARC, " > $file\.txt";
  my $marcfile = MARC::File::USMARC->in( "$file" );

  while (my $record = $marcfile->next()) {
    $recnum++;
    #if ($recnum % 10000 == 1) {
    if ($recnum % $size == 1) {
      $fileId++;
      close textMARC if ($recnum != 1);
      open textMARC, " > $size.$fileId.marc";
    }
    my @fields = $record->fields();
    next unless (@fields);
    print textMARC $record->as_usmarc;
    if ($recnum%25 == 0) {
      print "#";
    }
    print " $recnum records splitted\n" if ($recnum % $size == 0);
  }
  $marcfile->close();
  undef $marcfile;
  close textMARC;
  print " done.\n";
}
print "Finished splitting all file(s).\n";

sub formatId {
  my ($num) = @_;
  my $id;
  
  ($num > 0           && $num <= 9           ) && ($id = "00000000000$num");
  ($num > 9           && $num <= 99          ) && ($id =  "0000000000$num");
  ($num > 99          && $num <= 999         ) && ($id =   "000000000$num");
  ($num > 999         && $num <= 9999        ) && ($id =    "00000000$num");
  ($num > 9999        && $num <= 99999       ) && ($id =     "0000000$num");
  ($num > 99999       && $num <= 999999      ) && ($id =      "000000$num");
  ($num > 999999      && $num <= 9999999     ) && ($id =       "00000$num");
  ($num > 9999999     && $num <= 99999999    ) && ($id =        "0000$num");
  ($num > 99999999    && $num <= 999999999   ) && ($id =         "000$num");
  ($num > 999999999   && $num <= 9999999999  ) && ($id =          "00$num");
  ($num > 9999999999  && $num <= 99999999999 ) && ($id =           "0$num");
  ($num > 99999999999 && $num <= 999999999999) && ($id =            "$num");

  return $id;
}
