package GeneralFileFormat;
use Exporter;
@ISA = qw(Exporter);
#公開したいサブルーチン
@EXPORT = qw();
use strict;
use File::Path;
use File::Basename;
#use Crystal::MyUtility;
sub GuessFileFormat
{
my ($infile) = @_;
#ファイル名を(ベース名, ディレクトリ名, 拡張子)に分解
my @filenames = fileparse($infile, "\.[^\.]+");
#print "filenames: $filenames[0] : $filenames[1] : $filenames[2]
\n";
return "CIF" if($filenames[2] =~ /^\.cif$/i);
return "GULP Input" if($filenames[2] =~ /^\.glp$/i);
return "GULP MD History" if($filenames[2] =~ /^\.his$/i);
return "K.exe Input" if($filenames[2] =~ /^\.kin/i);
return "K.exe Output" if($filenames[2] =~ /^\.kout/i);
return "Rietan Input" if($filenames[2] =~ /^\.ins/i);
return "Rietan Intensity" if($filenames[2] =~ /^\.int/i);
my $linecount = 0;
my $IsGULP = 0;
my $nGULPSeparator = 0;
return "Read failed" unless(open(IN,"<$infile"));
while() {
$linecount++;
$nGULPSeparator++ if($_ =~ /^\*{80}/);
$IsGULP = 1 if($nGULPSeparator == 1 and $_ =~ /^\*\s+GENERAL\s+UTILITY\s+LATTICE\s+PROGRAM/i);
#print "$linecount: $nGULPSeperator: $IsGULP$LF";
if($IsGULP and $nGULPSeparator == 2) {
if($_ =~ /^\*\s+opti(mise)?\s/i) {
close(IN);
return "GULP Output opti";
}
elsif($_ =~ /^\*\s+fit\s/i) {
close(IN);
return "GULP Output fit";
}
elsif($_ =~ /^\*\s+md\s/i) {
close(IN);
return "GULP Output md";
}
}
}
close(IN);
return "unknown";
}
1;