Я пытаюсь создать простую программу, которая делает эти пять вещейTrouble запрашивая пользователя для входного файла, и возвращается с серией информации [Perl]
- запрашивает у пользователя входного файла.
- Запрашивает файл пользователя не существует, если пользователь указывает неизвестный документ (случай 1)
- Файл не является обычным файлом (случай 2)
- Существует проблема с открытием файла, что пользователь имеет (Случай 3)
- Указанный файл имеет (1) данные, которые не являются допустимым числом, или (2) более одного номера в строке. (Случай 4)
- Файл существует и может быть открыт без ошибок. Файл должен содержать одно число (любое десятичное или отрицательное/целое число) и вычислять сумму, количество чисел в файле и среднее/среднее (случай 5).
Я обозначил случаи кода, который я предоставляю. Каждый раз, когда я запускаю это, я не получаю ошибок, но тот же ответ в ответ. Я пытаюсь улучшить свои навыки сканирования файлов. Если у кого-нибудь есть какие-либо знания по этой теме, я был бы более чем благодарен. Заранее спасибо.
#!/usr/bin/perl
use strict;
use warnings;
print ("Enter a file name: ");
my $infile = <STDIN>; #Prompts the user for input
chomp ($infile); #Chomps the $infile Variable.
#****CASE ONE****
if (-e $infile) {
print ("File '$infile' does not exist.\n");
exit;
}
#****CASE TWO****
elsif (-f $infile) {
print ("Not a regular file or directory.\n");
exit;
}
#****CASE THREE****
open (my $input, '<', $infile) or die $!;
print ("Can not open input file '$infile': Permission denied. ");
#****CASE FOUR****
#for (my $inf = 1; ; ++$_)
my $inf = 9**9**9;
if (-e $infile =~ /^[a-zA-Z]+$/) {
} else {
print ("File '$infile' containts invalid data.\n");
exit;
}
#****Case Five****
my $Int_Pos = 0;
my $Int_Neg = 0;
my $Int_Dec = 0;
open(FHIN, '<', $infile); #Opens the file prompted by user.
my @lines = <FHIN>; #Variable storing the number of lines in the file.
chomp(@lines);
close(FHIN); #File handle is closed.
while (my $line = <$input>) { #iterates the file line by line, making $_ as teh defaule variable.
$Int_Pos++ if $line >= 0;
$Int_Neg++ if $line >= 0;
$Int_Dec++ if $line >= 0;
my $sum = $Int_Pos + $Int_Neg + $Int_Dec;
my $Observations = @lines;
my $Mean = $sum/3;
print ("Sum: '$sum'\n");
print ("Observations: '$Observations'\n");
print ("Mean: '$Mean'\n");
}
* «Каждый раз, когда я запускаю это, я не получаю ошибок, но тот же ответ в ответ». * И какой ответ? Предположительно «Файл не существует» для файлов, которые действительно существуют, и «Нет такого файла или каталога» для файлов, которые не существуют. Ваша логика все в порядке: '-e' и' -f' означает, что файл * существует *, вы печатаете «Permission denied» после успешного открытия файлов и т. Д. – ThisSuitIsBlackNot
Да; Я получаю «File doe not exist» в качестве моего возвращения.Как я буду использовать операторы -e и -f наоборот (если файл фактически не существует, он возвращает правильное сообщение)? –
* «Файл должен содержать одно число ... и вычислять сумму, количество чисел в файле и среднее/среднее значение» * Вы хотите рассчитать сумму и среднее значение * одного номера *? – Borodin