我已经完成了一项任务。以下是说明:
编写一个Perl程序来完成solar.txt文件中的以下每一项(参见链接at 班级主页)
关于solar.txt文件: 此文件包含9个项目的行,第一个是: Adrastea XV Jupiter 129000 0.30 0.00 0.00 Jewitt 1979 按行星或月亮的名称(第一个字段)按字母顺序排列。 []中的文本是上面一行中的相应字段。
此文件中的字段为:
我被困在第一条指令上。我可以在“solar.txt”文件中阅读,但之后我无法做到或无法弄明白。拆分阵列似乎是最好的选择,但目前不适合我。这是代码:
#usr/bin/perl
use warnings;
use strict;
open (SOLAR_FILE, "C:/perl_tests/solar.txt") or die "Could not open the file!";
my @array = (<SOLAR_FILE>);
close (SOLAR_FILE);
for (my $i = 0; $i < 8; $i++) {
my @tempArray = split(/ /, $array[$i]);
if ($tempArray[$i] eq "-") {
print "@tempArray";
}
}
open (SOLAR_FILE, "C:/perl_tests/solar.txt") or die "Could not open the file!";
my @array = (<SOLAR_FILE>);
close (SOLAR_FILE);
for my $record (@array) {
my @tempArray = split(/ /, $record);
if ($tempArray[2] eq qw(Jupiter, Uranus, Saturn, Pluto, Mars, Sun, Neptune, Earth)
s//???/" "/g;
#I know something goes where the (???) are, but I'm not sure how to do it.
{
print "@tempArray";
}
}
另外,我不确定如何启动另一个4.如果有人能指出我正确的方向,那将会有所帮助。
编辑:这是文件中的信息:
Adrastea XV Jupiter 129000 0.30 0.00 0.00 Jewitt 1979
Amalthea V Jupiter 181000 0.50 0.40 0.00 Barnard 1892
Ananke XII Jupiter 21200000 -631 147.00 0.17 Nicholson 1951
Ariel I Uranus 191000 2.52 0.00 0.00 Lassell 1851
Atlas XV Saturn 138000 0.60 0.00 0.00 Terrile 1980
Belinda XIV Uranus 75000 0.62 0.03 0.00 Voyager2 1986
Bianca VIII Uranus 59000 0.43 0.16 0.00 Voyager2 1986
...
Leda XIII Jupiter 11094000 238.72 27.00 0.15 Kowal 1974
Lysithea X Jupiter 11720000 259.22 29.00 0.11 Nicholson 1938
Mars IV Sun 227940000 686.98 1.85 0.09 - -
Megaclite XIX Jupiter 23911000 ? ? ? Sheppard 2000
Mercury I Sun 57910000 87.97 7.00 0.21 - -
Metis XVI Jupiter 128000 0.29 0.00 0.00 Synnott 1979
Mimas I Saturn 186000 0.94 1.53 0.02 Herschel 1789
Miranda V Uranus 130000 1.41 4.22 0.00 Kuiper 1948
Moon I Earth 384000 27.32 5.14 0.05 - -
Naiad III Neptune 48000 0.29 0.00 0.00 Voyager2 1989
Neptune VIII Sun 4504300000 60190.00 1.77 0.01 Adams 1846
...
答案 0 :(得分:0)
你的外循环正在遍历字段;它应该迭代整个行数:
for my $record (@array) {
my $tempArray = split(/ /, $record);
if ($tempArray[7] eq "-") # test 8th field
{
. . .
}
}
这假设你正确分割每一行;也就是说,字段之间的分隔符是空格字符。
答案 1 :(得分:0)
-
以外的内容:if ($fields[7] ne '-') { ... }
splice(@fields, 1, 0);
if ($fields[4] < 0) { ... }
Voyager2
:if ($fields[7] eq 'Voyager2') { ... }
$fields[4]*24*60*60
给出的近似结果可能在容差范围内。