#! /usr/bin/perl use File::Basename; use Getopt::Long; use File::Copy; sub usage() { print "Usage: perl $0 [-directory=\n"; print "Example:\n"; print "perl $0 -directory=directory \n"; print "where -directory is the directory containing the files\n"; }; %gOptions; &GetOptions(\%gOptions, qw(directory=s)); unless ($gOptions{directory} ) { usage(); exit(1); }; print "This program is working!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; print "version:mrf2jsonCombo.px !!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; chomp($directory=$gOptions{directory}); opendir DH, $directory or die "cannot open $directory $!"; foreach $file (readdir DH){ print "now processing $file\n"; $comboFile= $directory . "/" . $file; open INFILE, "<$comboFile" or die "cannot open $comboFile $!"; #open INFILE, ">GEOJSON.json"; #print JSON "{"; #print JSON "\"confrimsTo\": \"https://project-open-data.cio.gov/v1.1/schema\""; #print JSON "\"dataset\":["; while (){ #print "\$_ = $_"; $line = $_; if ($line =~//){ }elsif($line =~/encoding/){ #print "skipping 222222222222222222222222222222 \n"; }elsif($line =~/PODVer1_1/){ if ($started eq "yes"){ print JSON "},"; $started="no"; }else{ print JSON "{"; $started="yes"; }; #print JSON "\"accessLevel\": \"public\","; #print JSON "\"bureauCode\": [ \"018:10\" ],"; }elsif($line =~//){ $righbracLoc=index($line,">")+1; $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-1; $elText=substr($line,$righbracLoc,$length); #print "\$elText = $elText\n"; #print OUTJSON "type: \"$elText\","; #print OUTJSON "\"type\": \"$elText\","; print JSON "\"\@type\": \"$elText\","; #print OUTJSON "done!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; #title-------------------------------------------------- }elsif($line =~/title/){ #print "in the title !!!!!!!!!!!!!!!!!!!!!!!\n"; $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); if ($line =~/TIGER/){ #print "dealing with TIGEr!!!!!!!!!!!!!!!!!!!!\n"; $slashLocA=index($line, "/"); $lengthA=$slashLocA-$righbracLoc+1; $elTextA=substr($line,$righbracLoc+1,$lengthA-1); $elTextB=substr($line,$slashLocA+1); $slashLocB=index($elTextB, "/")-1; $elTextC=substr($elTextB,0,$slashLocB); $elText = $elTextA . $elTextC; #print "dealing with TIGEr!!!!!!!!!!!!!!!!!!!!\n"; #print "\$elTextA = $elTextA (TIGER)\n"; #print "\$elTextB = $elTextB (TIGER)\n"; #print "\$elTextC = $elTextC(TIGER)\n"; }else{ $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc; $elText=substr($line,$righbracLoc+1,$length-2); #print "\$elText = $elText (else)\n"; }; $elLength=$righbracLoc-$leftBracket-1; $elementMain=substr($line,$leftBracket+1, $elLength); #elLength=$righbracLoc-$leftBracket; $newElement= "\"" . $elementMain . "\":"; print JSON "$newElement \"$elText\","; #keyword---------------------------------------------------------------------------------------------------- }elsif($line =~/keyword/){ #print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n"; if ($line =~/"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); #print "inserting the keyword: $elText\n"; print JSON"\"$elText\","; #elsif($line =~/\/keywordItem/){ #print "dealing with the end keywordItem tag \n"; #print JSON"]," }elsif($line =~/\/keyword/){ print JSON "],"; #print "dealing with $line (end tag)\n" }else{ print JSON "\"keyword\": ["; #print "dealing with $line (start tag)\n"; }; #print "-----------------------------------------------------------------------\n"; }elsif($line =~//){ #print "dealing with the description!!!!!!!!!!!!!!!!!!!\n"; #print "\$line = $line\n"; $endTagLoc=index($line,"<\/"); #print "\$endTagLoc = $endTagLoc\n"; if ($endTagLoc <0){ $descComplete="no"; $lastbracLoc=index($line,">"); $descPart1 = substr($line,$lastbracLoc+1); #print "\$descPart1 = $descPart1\n"; }else{ $lastbracLoc=index($line,">"); $descPart1 = substr($line,$lastbracLoc+1); $firstBracLoc=index($descPart1,"<"); $finDesc=substr($descPart1,0,$firstBracLoc-1); print JSON "\"description\": $finDesc,"; }; }elsif($descComplete eq "no"){ #print "\$line = $line\n"; $lengthLine=length($line); #print "\$lengthLine = $lengthLine\n"; if ($lengthLine>5){ $firstBracLoc=index($line,"<"); chomp($finDesc=substr($line,0,$firstBracLoc-1)); chomp($descPart1); $descPart1=~s/\r\n//; chomp($finDesc); #chomp($completeDesc=$descPart1 . $finDesc); #chomp($completeDesc=join $descPart1,$finDesc); $completeDesc=join $descPart1,$finDesc; #$completeDesc=$descPart1; print JSON "\"description\":\" $completeDesc\","; $descComplete="yes"; }; }elsif($line =~/<\/publisher>/){ #print OUTJSON "},"; foreach $subOrgArray(@subOrgArray){ print JSON "$subOrgArray"; }; print JSON "},"; }elsif($line =~//){ print JSON "\"publisher\":{"; }elsif($line =~/name/){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); print JSON "\"name\": \"$elText\","; #subOrganization---------------------------------------------------- }elsif($line =~/subOrganizationOf/){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); $elLength=$righbracLoc-$leftBracket-1; $elementMain=substr($line,$leftBracket+1, $elLength); #elLength=$righbracLoc-$leftBracket; $newElement= "\"" . $elementMain . "\":{"; $subOrgName="\"name\":"; print JSON "$newElement $subOrgName \"$elText\","; $subOrgArray[$subOrgArrayCounter]="}"; $subOrgArrayCounter++; #-language-------------------------------------------------------------------------------- }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); $elLength=$righbracLoc-$leftBracket-1; $elementMain=substr($line,$leftBracket+1, $elLength); #elLength=$righbracLoc-$leftBracket; $newElement= "\"" . $elementMain . "\":"; print JSON "$newElement [\"$elText\"],"; # -ContactPoint--------------------------------------------------------------------------- }elsif($line =~/<\/contactPoint>/){ print JSON "},"; }elsif($line =~//){ print JSON "\"contactPoint\": {" }elsif($line =~//){ $firstBrac=index($line,">"); $lastBarac=rindex($line,"<"); $length=$lastBarac-$firstBrac-1; $newFN=substr($line,$firstBrac+1,$length); #print "\$firstBrac = $firstBrac\n"; #print "\$lastBarac = $lastBarac\n"; #print "\$newFN = $newFN\n"; print JSON "\"fn\":\"$newFN\","; }elsif($line =~//){ $firstBrac=index($line,">"); $lastBarac=rindex($line,"<"); $length=$lastBarac-$firstBrac-1; $newEmail=substr($line,$firstBrac+1,$length); print JSON "\"hasEmail\":\"$newEmail\""; #temporal--------------------------------------------------------------------- }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $begin=substr($line,$righbracLoc+1,$length); }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $end=substr($line,$righbracLoc+1,$length); }elsif($line =~/<\/temporal>/){ print JSON "\"$begin/$end\","; }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); $elLength=$righbracLoc-$leftBracket-1; $elementMain=substr($line,$leftBracket+1, $elLength); #elLength=$righbracLoc-$leftBracket; $newElement= "\"" . $elementMain . "\":"; #print OUTJSON "$newElement \"$elText\","; print JSON "$newElement"; #print "temporal!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; }elsif($line =~//){ $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $newMod=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"modified\":\"$newMod\","; #publisher-------------------------------------------------------------------- }elsif($line =~/<\/publisher>/){ #print OUTJSON "},"; foreach $subOrgArray(@subOrgArray){ print JSON "$subOrgArray"; }; print JSON "},"; }elsif($line =~//){ print JSON "\"publisher\":{"; }elsif($line =~/name/){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); print JSON "\"name\": \"$elText\","; #subOrganization---------------------------------------------------- }elsif($line =~/subOrganizationOf/){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $elText=substr($line,$righbracLoc+1,$length); $elLength=$righbracLoc-$leftBracket-1; $elementMain=substr($line,$leftBracket+1, $elLength); #elLength=$righbracLoc-$leftBracket; $newElement= "\"" . $elementMain . "\":{"; $subOrgName="\"name\":"; print JSON "$newElement $subOrgName \"$elText\","; $subOrgArray[$subOrgArrayCounter]="}"; $subOrgArrayCounter++; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $newID=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"identifier\":\"$newID\","; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $newID=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"accessLevel\":\"$newID\","; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $newBureau=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"bureauCode\":\"$newBureau\","; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $newProgram=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"programCode\":\"$newBureau\","; #accrualPerdicity }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $Period=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"accrualPeriodicity\":\"$Period\","; #spatial }elsif($line =~//){ print JSON "\"spatial\":\"{"; #pairs------------------------------------------------------------------------------ }elsif($line =~//){ }elsif($line =~/<\/pair1>/){ print JSON "[[[$westBC,$northBC],"; }elsif($line =~//){ #skip }elsif($line =~/<\/pair2>/){ print JSON "[$eastBC,$southBC],"; }elsif($line =~//){ #skip }elsif($line =~/<\/pair3>/){ print JSON "[$eastBC,$northBC],"; }elsif($line =~//){ #skip }elsif($line =~/<\/pair4>/){ print JSON "[$westBC,$southBC],"; }elsif($line =~/ /){ }elsif($line =~/ <\/pair5>/){ print JSON "[$westBC,$northBC]]]}\","; #coordinates--------------------------------------------------------------- }elsif($line=~//){ $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $spatialType=substr($line,$righbracLoc+1,$linelength-1); #print "\$spatialType = $spatialType\n"; print JSON "\\\"type\\\":\\\"$spatialType\\\","; }elsif($line=~//){ $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $coordinates=substr($line,$righbracLoc+1,$linelength-1); #print "\$spatialType = $spatialType\n"; print JSON "\\\"$coordinates\\\":" }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $westBC=substr($line,$righbracLoc+1,$length); }elsif($line =~//){ $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $northBC=substr($line,$righbracLoc+1,$length); }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $southBC=substr($line,$righbracLoc+1,$length); }elsif($line =~//){ $leftBracket=index($line,"<"); $righbracLoc=index($line,">"); $slashLoc=index($line, "/"); $length=$slashLoc-$righbracLoc-2; $eastBC=substr($line,$righbracLoc+1,$length); #print "\$eastBC = $eastBC\n"; #accrualPerdicity #distribution }elsif($line =~//){ print JSON "\"distribution\":[{"; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $URL=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"downloadURL\": \"$URL\","; }elsif($line =~//){#default $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $mediaType=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"mediaType\": \"$mediaType\","; }elsif($line =~//){ $righbracLoc=index($line,">"); $leftbracloc= rindex($line,"<"); $linelength=$leftbracloc-$righbracLoc; $distTile=substr($line,$righbracLoc+1,$linelength-1); print JSON "\"title\": \"$distTile\"}],\n"; };#if ($line =~//){ };#while (){ }; close JSON; #system" sed -i.bak 's/^M$//' JSONSample.json";