小编Jan*_*Jan的帖子

嵌套while循环计算多个目的地的距离

哦,我现在搞得很糟糕.我想用严格和警告创建一个合适的脚本(对我来说仍然是一个挑战).但现在我完全迷失了.我一直在看这么多的例子,我很困惑.我正在尝试使用lat/lon计算2点之间的距离.我想我有那个部分覆盖了gis :: distance.但问题是我试图找到彼此相距5000米的目的地.(如果目的地相同则跳过).因此,当它找到距离另一个目的地5000米的目的地时,我希望它将它放在第一个文件中的最后一个元素之后.

两个输入文件都是相同的,这是它们的外观.两个文件都有大约45k行.

Europe;3;France;23;Parijs;42545;48,856555;2,350976
Europe;3;France;23;Parisot;84459;44,264381;1,857827
Europe;3;France;23;Parlan;11337;44,828976;2,172435
Europe;3;France;23;Parnac;35670;46,4533;1,4425
Europe;3;France;23;Parnans;22065;45,1097;5,1456
Run Code Online (Sandbox Code Playgroud)

假设这些目的地中有2个彼此靠近,我试图像这样输出:

Europe;3;France;23;Parijs;42545;48,856555;2,350976;Parlan;11337;200
Europe;3;France;23;Parisot;84459;44,264381;1,857827;
Europe;3;France;23;Parlan;11337;44,828976;2,172435;
Europe;3;France;23;Parnac;35670;46,4533;1,4425;Parisot;84459;2000;Parnans;22065;350
Europe;3;France;23;Parnans;22065;45,1097;5,1456;
Run Code Online (Sandbox Code Playgroud)

当然,实际结果将匹配2个以上.在outputfile中,添加匹配的目标,目标ID和计算的距离.每个目的地可能有多个匹配项.这真的很难解释哈哈.正如我所说,我正在使用严格和警告,并将错误范围缩小到最低限度,但仍然不完全.这些是错误:

Global symbol "$infile1" requires explicit package name at E:\etc.pl line 17.
Execution of E:\etc.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码.我也没有对我的宣言做出正面或反面.

有人能帮我吗?(也许这不是最有效的方法,但现在它帮助我逐步了解perl)

use strict;
use warnings;
use GIS::Distance::Lite qw(distance);

my $inputfile1 = shift || die "Give input!\n";
my $inputfile2 = shift || die "Give more input!\n";
my $outputfile = shift || die "Give output!\n";

open my $INFILE1, '<', $inputfile1  or die "In use/Not found :$!\n"; …
Run Code Online (Sandbox Code Playgroud)

perl geolocation while-loop

5
推荐指数
1
解决办法
891
查看次数

使用csv文件使用utf8名称复制/重命名图像

我正在编写一个脚本来批量重命名和复制基于csv文件的图像.csv由第1列组成:旧名称和第2列:新名称.我想使用csv文件作为perl脚本的输入,以便它检查旧名称并使用新名称将副本复制到新文件夹中.(我认为)我与图像有关的问题.它们包含像ß等utf8字符.当我运行脚本时,它打印出来:Barfu├ƒg├ñsschen它应该是Barfußgässchen并且出现以下错误:

Unsuccessful stat on filename containing newline at C:/Perl64/lib/File/Copy.pm line 148, <$INFILE> line 1.
Copy failed: No such file or directory at X:\Script directory\correction.pl line 26, <$INFILE> line 1.
Run Code Online (Sandbox Code Playgroud)

我知道它与Binmode utf8有关,但即使我尝试一个简单的脚本(在这里看到它:如何从Perl输出UTF-8?):

use strict;
use utf8;
my $str = 'Çirçös';
binmode(STDOUT, ":utf8");
print "$str\n";
Run Code Online (Sandbox Code Playgroud)

它打印出来:Ãirþ÷s

这是我的整个剧本,有人可以向我解释我哪里出错了吗?(它不是最干净的代码,因为我正在测试的东西).

use strict;
use warnings;
use File::Copy;
use utf8;

my $inputfile  = shift || die "give input!\n";
#my $outputfile = shift || die "Give output!\n";

open my $INFILE,  '<', $inputfile   or die "In use …
Run Code Online (Sandbox Code Playgroud)

csv perl utf-8

5
推荐指数
1
解决办法
1045
查看次数

标签 统计

perl ×2

csv ×1

geolocation ×1

utf-8 ×1

while-loop ×1