Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 45

Ссылки на скалярную переменную, хэш или массив

15.06.2015, 08:33. Показов 1104. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание вот такое:
В текстовом файле находятся записи о книгах в библиотеке. В каждой строке записана информация об одной книге: ФИО автора, название, год издания, количество страниц. Задачу необходимо решить с использованием подпрограмм. Напишите программу, которая согласно запросу пользователя выводит информацию о книгах указанного автора. Программа должна сохранять результаты работы в файл.

К этому заданию написал код:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use strict;
use warnings;
use 5.010;
my @date;
my $k=0;
print "Введите ФИО Автора \n";
my $fio = <STDIN>;
chomp $fio;
my $f = $fio;
my %hash;
read_file();
insert_file();
 
sub read_file {
open FILE, '<F:/Progra/knigi.txt';
 
while (my $file_line = <FILE>) {
        my @mas = split(";", $file_line);
        if ($mas[0] eq $f){
        print $mas[0].$mas[1]."\n";
        
        }
    }
 
close FILE;
};
 
sub insert_file {
open FILE, '>>F:/Progra/knigi2.txt';
print FILE "Искали автора ".$f;
close FILE;
};
<>
Нужно дополнить сложными структурами данных, например, храните информацию в массиве хэшей. Обеспечьте всю основную работу программы поддержкой этих структур. Помогите пожалуйста, завтра зачет. А времени мало
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2015, 08:33
Ответы с готовыми решениями:

Необходимо объявить скалярную переменную!
Здравствуйте! Помогите пожалуйста с проблемой, уже битый час не могу разобраться. Фото приложено.

ASP NET ошибка Необходимо объявить скалярную переменную
Здравствуйте! У меня возникла такая проблема: Пишу обработчик для кнопки: Dim connect As New...

При попытке сохранения данных ошибка: Необходимо объявить скалярную переменную
Разбираюсь слабо. Тут идет сохранение изменений из dataGridView в бд slq. Ошибка на строке: int recordsAffected = cmd.ExecuteNonQuery(); ...

7
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
15.06.2015, 12:07
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use strict;
use warnings;
use 5.010;
 
sub load_file($) {
 
    our @AoH;
    my $name = shift;
    
    open F, $name or die $!;    
    while ( <F> ) { 
        next if /^$/;   
        my %fields;
    
        ( $fields{ "автор"   },
          $fields{ "название"},
          $fields{ "год"     },
          $fields{ "страниц" }
        ) = split /;/;
        
        push @AoH , { %fields };
    }
    
    close F;
    
}
 
sub prompt($) {
    my $what = shift;
    print "$what > ";
    my $ans = <>;
    chomp $ans; 
    return length($ans) > 0 ? $ans : undef ;
}
 
sub log_file($) {
    my $str = shift;
    open LOG, ">>", "books.log" or die $!;
    use DateTime;
    my $dt = DateTime->today;
    say LOG $dt->datetime(), $str;
    close LOG;
}
 
sub query($$) { 
    my @results = ();
    my $field = shift or return;
    my $val   = shift or return;
    
    our @AoH;
    for my $book ( @AoH ) {
        if ( $book->{$field} =~ /$val/il) {
            push @results, $book;
        }       
    }   
    return @results;
}
 
sub show($) {
    my $book = shift;   
    say "АВТОР:", $book->{"автор"};
    say "ГОД ИЗДАНИЯ:", $book->{"год"};
    # и так далее
}
 
 
our @AoH;   # Array of Hashes; наш массив анонимных хэшей для структуированного хранения 
 
load_file("books.txt");
print "Файл books.txt пустой" and exit if not @AoH;
print "Всего загружено ", scalar @AoH, " книг\n";
 
my $ans     = prompt("Введите автора книги");
my @books   = query ("автор", $ans );
print "Ничего не найдено\n" if not @books;
for my $book ( @books ) {
    show( $book );
    log_file(sprintf("По запросу 'автор' = $ans найдено %d книг", scalar @books));
}
 
$ans    = prompt("Введите год");
@books  = query ("год", $ans );
print "Ничего не найдено" if not @books;
for my $book ( @books ) {
    show( $book );
    log_file(sprintf("По запросу 'год' = $ans найдено %d книг", scalar @books));
}
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 45
15.06.2015, 13:07  [ТС]
Perl
1
2
3
4
5
6
7
sub log_file($) {
    my $str = shift;
    open LOG, ">>", "books.log" or die $!;
    use DateTime;
    my $dt = DateTime->today;
    say LOG $dt->datetime(), $str;
    close LOG;
Выдает ошибку в DateTime
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
15.06.2015, 14:07
разумеется.
этот модуль надо установить.

Bash
1
cpan DateTime
в случае Windows + ActivePerl лучше
Windows Batch file
1
ppm install DateTime
если лень устанавливать DateTime, можно заменить 4,5,6-ю строку на
Perl
1
2
use POSIX 'strftime';
say LOG strftime("%d-%m-%y %H:%M:%S $str", localtime);
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 45
15.06.2015, 15:58  [ТС]
Как то сложно для моего разума А если просто, хранить информацию в массиве хэшей. Как будет выглядеть из моей работы?

Добавлено через 7 минут
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use strict;
use warnings;
use 5.010;
use POSIX 'strftime';
say LOG strftime("%d-%m-%y %H:%M:%S $str", localtime);
    our @AoH;
    my $name = shift;    
    open F, $name or die $!;    
    while ( <F> ) { 
        next if /^$/;   
        my %fields;
        ( $fields{ "автор"   },
          $fields{ "название"},
          $fields{ "год"     },
          $fields{ "страниц" }
        ) = split /;/;
        
        push @AoH , { %fields };
    }   
    close F;
sub prompt($) {
    my $what = shift;
    print "$what > ";
    my $ans = <>;
    chomp $ans; 
    return length($ans) > 0 ? $ans : undef ;
} 
sub query($$) { 
    my @results = ();
    my $field = shift or return;
    my $val   = shift or return;  
    our @AoH;
    for my $book ( @AoH ) {
        if ( $book->{$field} =~ /$val/il) {
            push @results, $book;
        }       
    }   
    return @results;
}
sub show($) {
    my $book = shift;   
    say "АВТОР:", $book->{"автор"};
    say "ГОД ИЗДАНИЯ:", $book->{"год"};
    # и так далее
}
Оставил вот такой код, пишет на 5 строке ошибку

Добавлено через 2 минуты
Файл, где сама библиотека называется knigi.txt
А сам файл где сохраняются данные knigi2.txt

Добавлено через 5 минут
По примеру ######

Пусть @info – это массив всех абонентов. Тогда:
$$info[0]{id} # Это номер первого абонента
$$info[4]{id} # Это номер пятого абонента
$$info[4]{fio} # Это фамилия пятого абонента
foreach $abonent (@info) # Это цикл перебора всех абонентов в массиве
{
$$abonent{id} # Это номер очередного абонента
}
scalar @info # Это количество абонентов всего в массиве
keys %{$info[0]} # Это список ключей хэша первого абонента
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
15.06.2015, 16:07
4,5,6 СТРОКУ -> Я ИМЕЛ В ВИДУ ИЗ ТВОЕГО СООБЩЕНИЯ ОТ СЕГОДНЯ 13:07


двоечников надо убивать из рогатки.

вот полный текст:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use strict;
use warnings;
use 5.010;
 
sub load_file($) {
 
    our @AoH;
    my $name = shift;
    
    open F, $name or die $!;    
    while ( <F> ) { 
        next if /^$/;   
        my %fields;
    
        ( $fields{ "автор"   },
          $fields{ "название"},
          $fields{ "год"     },
          $fields{ "страниц" }
        ) = split /;/;
        
        push @AoH , { %fields };
    }
    
    close F;
    
}
 
sub prompt($) {
    my $what = shift;
    print "$what > ";
    my $ans = <>;
    chomp $ans; 
    return length($ans) > 0 ? $ans : undef ;
}
 
sub log_file($) {
    my $str = shift;
    open LOG, ">>", "books.log" or die $!;
    use POSIX 'strftime';
    say LOG strftime("%d-%m-%y %H:%M:%S $str", localtime);
 
}
 
sub query($$) { 
    my @results = ();
    my $field = shift or return;
    my $val   = shift or return;
    
    our @AoH;
    for my $book ( @AoH ) {
        if ( $book->{$field} =~ /$val/il) {
            push @results, $book;
        }       
    }   
    return @results;
}
 
sub show($) {
    my $book = shift;   
    say "АВТОР:", $book->{"автор"};
    say "ГОД ИЗДАНИЯ:", $book->{"год"};
    # и так далее
}
 
 
our @AoH;   # Array of Hashes; наш массив анонимных хэшей для структуированного хранения 
 
load_file("books.txt");
print "Файл books.txt пустой" and exit if not @AoH;
print "Всего загружено ", scalar @AoH, " книг\n";
 
my $ans     = prompt("Введите автора книги");
my @books   = query ("автор", $ans );
print "Ничего не найдено\n" if not @books;
for my $book ( @books ) {
    show( $book );
    log_file(sprintf("По запросу 'автор' = $ans найдено %d книг", scalar @books));
}
 
$ans    = prompt("Введите год");
@books  = query ("год", $ans );
print "Ничего не найдено" if not @books;
for my $book ( @books ) {
    show( $book );
    log_file(sprintf("По запросу 'год' = $ans найдено %d книг", scalar @books));
}
Добавлено через 7 минут
Цитата Сообщение от Даниил_9999 Посмотреть сообщение
Как то сложно для моего разума
твой разум не способен понять, что сделано было точно по заданию из 1-го сообщения?
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 45
15.06.2015, 16:08  [ТС]
Все отлично, выводит, но... Кодировка страдает, все перебрал
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
15.06.2015, 16:48
добавь в самое начало

Perl
1
`chcp 1251` if $ENV{OS} =~ /WINDOWS/i;
в 4-ю строчку, например.


и шрифт в консоли установливай TrueType, если ты под Windows
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2015, 16:48
Помогаю со студенческими работами здесь

Необходимо объявить скалярную переменную "@IPN"
Здравствуйте! У меня возникла такая проблема: Пишу обработчик для кнопки: Dim connect As New...

ERROR Необходимо объявить скалярную переменную "ID"
public void Update_Tariff(int ID, string login, string password) { string connStr = @&quot;Data...

Придумать достаточно сложную скалярную функцию (или процедуру) одной переменной
Не пользуясь встроенными функциями интегрирования и дифференцирования: а1) Построить ее график. а2) Построить график первой...

Ссылки на хэш
Значит у меня есть массив хэшэй примерно вот такой $book{&quot;...&quot;=&gt;..., &quot;...&quot;=&gt;..., ...

Qt чтение из базы данных в переменную или массив
Довольно странный вопрос, т.к. вывод переменной реализован очень просто, а вот занесение ее в массив или переменную - никак не удается. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru