从文件中提取数据,编程语言不限(最好用perl或python), 采纳后再额外附加30分

2025-05-06 19:45:37
推荐回答(3个)
回答1:

你说的东西很好实现,但是我没有懂你的意思。提取区间范围为2000以内是什么意思?为什么4-8可以,但是9不算进去?或者是显示问题?第二列是分成2部分看么?11-14是1108,而4-8是1008所以9不算?我先试试看我这种理解方式吧,希望我理解对了。
做了一下,结果如下, 你看是不是这回事
11089042 south B
11089043 south A
11089162 south D
11089163 south C

10088738 north B
10088739 north D
10088857 north C
10088898 north A
10088899 north A
代码如下:
#!/usr/bin/perl -w

use warnings;
use strict;

open IN, "ex.txt" or die "no file";
my %hash=();
while()
{
if(/^\d/)
{
my @a=split(/\s/,$_); # split(/\t/,$_) according to your demande
if($a[2]=/(\d{4})(\d{4})/)
{
$hash{$1.$a[1]}.="$1$2\t$a[1]\t$a[3]\n"
}
}
}
close IN;
open OUT,">","result.txt";
foreach my $number(keys(%hash))
{
my @line=split /\n/,$hash{$number};
my $A=0; my $B=0; my $C=0; my $D=0;
foreach(@line)
{
my @element=split(/\t/,$_);
if($element[2] eq 'A') {$A=1;}
if($element[2] eq 'B') {$B=1;}
if($element[2] eq 'C') {$C=1;}
if($element[2] eq 'D') {$D=1;}
}
$A*$B*$C*$D==0 or print OUT $hash{$number}."\n";
}
close OUT;

回答2:

题主是不是糊涂了
第一行 01 east 10088649 B
最后一行20 west 10089649 D
差值10089649-10088649=1000,最大才差一千,
你规定的“提取区间范围为2000以内”、“2,彼此坐标之间差小于2000”
从哪里算起?搞统计出这种低级错误。

回答3:

楼上的朋友,php语言写的算法很好,但楼主要用python实现