#=============================================== # GeneralDataFile #=============================================== package GeneralDataFile; use Common; @ISA = qw(Common); #公開したいサブルーチン @EXPORT = qw(); use strict; use JFile; use Deps; sub CheckFileType { my ($path) = @_; my ($drive, $dir, $filename, $ext, $lastdir, $filebody) = Deps::SplitFilePath($path); my $infile = new JFile; my $ret = $infile->Open($path, "r"); return undef unless($ret); my $FileType = ''; my $title = ''; my $nData = 0; my $line = $infile->ReadLine(); Utils::DelSpace($line); if($line =~ /^[\d+-\.eEdD]*$/) { $infile->rewind(); } elsif($line =~ /^\d+$/) { $nData = $line; $FileType = "nData-"; } else { $title = $line; $FileType = "Title-"; $line = $infile->ReadLine(); if($line =~ /^\d+$/) { $nData = $line; $FileType = "Title-nData-"; } else { $infile->rewind(); $line = $infile->ReadLine(); } } my $IsXYData = 1; for(my $i = 0 ; $i < 10 ; $i++) { my $line = $infile->ReadLine(); last unless(defined $line); Utils::DelSpace($line); unless($line =~ /^[\d+-\.eEdD,\s]*$/) { $IsXYData = 0; } my @array = split(/\s,/, $line); } $infile->Close(); return "${FileType}XY Data File" if($IsXYData); return undef; } #============================================================ # コンストラクタ、デストラクタ #============================================================ sub new { my ($module) = @_; my $this = {}; bless $this; return $this; } sub DESTROY { my $this = shift; } sub ClearAll { my $this=shift; undef $this->{'DataArray'}; } sub FileType { return shift->{'FileType'}; } sub FileName { return shift->{'FileName'}; } sub SetFileName { my ($this,$f)=@_; return $this->{'FileName'} = $f; } sub DataArray { return shift->{'DataArray'}; } sub SetDataArray { my ($this, $DataArray) = @_; return $this->{'DataArray'} = $DataArray; } sub Read { my ($this, $filename) = @_; $this->ClearAll(); my $FileType = $this->{'FileType'} = GeneralDataFile::CheckFileType($filename); $this->SetFileName($filename); $this->SetDataArray(new GraphDataArray); my $title = ''; my $nData = 0; my $Data = new GraphData; my @X; my @YArray; my $infile = new JFile; my $ret = $infile->Open($filename, "r"); return undef unless($ret); my $line = $infile->ReadLine(); Utils::DelSpace($line); if($line =~ /^[\d+-\.eEdD]*$/) { $infile->rewind(); } elsif($line =~ /^\d+$/) { $nData = $line; } else { $title = $line; $line = $infile->ReadLine(); if($line =~ /^\d+$/) { $nData = $line; } else { $infile->rewind(); $line = $infile->ReadLine(); } } $nData = 10000000 if($nData == 0); my $nY = 0; for(my $i = 0 ; $i < $nData ; $i++) { my $line = $infile->ReadLine(); last unless(defined $line); Utils::DelSpace($line); #print "line: $line\n"; my @a = split(/[\s,]+/, $line); $nY = @a - 1; if($i == 0) { for(my $j = 0 ; $j < $nY ; $j++) { my @array; $YArray[$j] = \@array; #print "YA: $YArray[$j]\n"; } } $X[$i] = $a[0]; for(my $j = 0 ; $j < $nY ; $j++) { my $pY = $YArray[$j]; #print "i=$i j=$j pY=$pY\n"; $pY->[$i] = $a[$j+1]; } my $pY = $YArray[0]; #print "i=$i X=$X[$i] Y=$pY->[$i]\n"; } $Data->SetTitle($title); $Data->{"x0"} = \@X; for(my $j = 0 ; $j < $nY ; $j++) { $Data->{"y$j"} = $YArray[$j]; } $Data->CalMinMax(); $this->{'DataArray'}->AddGraphData($Data); $infile->Close(); return undef } 1;