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;