#!C:/Perl/bin/perl -w #入力(ファイル名はユーザー指定) open (IN, "****.in"); open (OUT, ">****D.csv"); while ($line = ) { chomp $line; # $line の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($ID, $K, $X, $Y) = split (/,/, $line); $IDa = $ID; $Ka = $K; $Xa = $X; $Ya = $Y; open (INa, "****.in"); open (OUTa, ">temp2.csv"); while ($linea = ){ chomp $linea; # $linea の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDb, $Kb, $Xb, $Yb) = split (/,/, $linea); #距離を計算 $D = sqrt((($Xb-$Xa)**2) + (($Yb-$Ya)**2)); $D = sprintf ("%.0f", $D); #一時ファイル(temp2.csv)に出力 print OUTa $IDa, ",", $Ka, ",", $IDb, ",", $Kb, ",", $D, "\n"; } close OUTa; close INa; #一時ファイル(temp3.csv)を空にする open (OUTe,">temp3.csv"); print OUTe "\n"; close OUTe; #距離でソート. open (INb,"temp2.csv"); open (OUTb,">temp3.csv"); while(){ $lineb = $_; chop $lineb; #改行を削除する $keyX=(split(/,/, $lineb))[4]; #5列目(距離$D)からキーを得る push (@alllineb,$lineb); #データ push (@keyXs, $keyX); #キー } #ソート foreach $lineb (sort{ (split(/,/,$a))[4] <=> (split(/,/,$b))[4] } @alllineb) { my ($IDa, $Ka, $IDb, $Kb, $Db ) = split(/,/, $lineb); #出力 print OUTb $IDa, ",", $Ka, ",", $IDb, ",", $Kb, ",", $Db, "\n"; } @alllineb=();#配列を空にする @keyXs=();#キーを空にする close INb; close OUTb; open (INc, "temp3.csv"); $linec1 = ; chomp $linec1; # $linec1(1行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDd, $Kd, $Dd) = split (/,/, $linec1); $linec2 = ; chomp $linec2; # $linec2(2行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDe, $Ke, $De) = split (/,/, $linec2); $linec3 = ; chomp $linec3; # $linec3(3行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDf, $Kf, $Df) = split (/,/, $linec3); $linec4 = ; chomp $linec4; # $linec4(4行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDg, $Kg, $Dg) = split (/,/, $linec4); $linec5 = ; chomp $linec5; # $linec5(5行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDh, $Kh, $Dh) = split (/,/, $linec5); $linec6 = ; chomp $linec6; # $linec6(6行目)の末尾の改行コードを削除する. #カンマ区切りのリストを分解 my($IDc, $Kc, $IDi, $Ki, $Di) = split (/,/, $linec6); print OUT $IDa, ",", $Ka, ",", $IDe, ",", $Ke, ",", $De, ",", $IDf, ",", $Kf, ",", $Df, ",", $IDg, ",", $Kg, ",", $Dg, ",", $IDh, ",", $Kh, ",", $Dh, ",", $IDi, ",", $Ki, ",", $Di, "\n"; close Inc; }; close IN; close OUT;