Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
1

Работа с файлами

27.09.2013, 01:53. Просмотров 1075. Ответов 10
Метки нет (Все метки)

Я совсем не давно начал изучать Perl и моих знаний не хватает ! Мне нужно получить рандомное число, с помощью которого из одного фаила со списком нужно вытащить 5 IP names в другой фаил . Для того чтобы получить рандом нужно сложить все числа дня рождения, прибавить к нему рандом число и применить mod 106 . С рандомом и записью с фаила в фаил я, вроде, разобрался, но как применить рандомное число списку в фаиле додуматься не могу !
Помогите люди добрые ! )))

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
#!/usr/bin/perl
use strict;
use warnings;
 
my $range = 100;
my $birthday = 21061995;
my $sum = 0;
my $mod = 106;
my $modsum = 0;
  my $random_number = int(rand($range));
 
   $sum = $random_number + $birthday;
   print "$sum \n";
$modsum = $sum % $mod;
   print "$modsum\n";
my $totalrand = &rand;
sub rand{
if($modsum >= 10){
   my @modsumarray = split(//, $modsum);
   my $sumofint = $modsumarray[0] + $modsumarray[1];
   if ($sumofint >=10) {
    my @x = split(//, $sumofint);
    my $y = $x[0] + $x[1];
   } else {
   return $sumofint;
   }
}
}
print "$totalrand\n";
 
open(DATA1, "<names.txt")or die "Couldn't open names.txt for reading: $!\n";
open(DATA2, ">names2.txt");
 
while(<DATA1>)
{
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );
Добавлено через 10 минут
Я думал, что можно вытаскивать из списка 5 IP names, которые находятся на 5, 10, 15, 20 и 25-ом месте в списке если рандомное число к примеру 5. Но как это оформить на Perl я без понятия!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2013, 01:53
Ответы с готовыми решениями:

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала...

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о...

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными...

10
348 / 298 / 164
Регистрация: 15.03.2012
Сообщений: 649
Записей в блоге: 1
27.09.2013, 07:47 2
Цитата Сообщение от Misanthrop Посмотреть сообщение
Я думал, что можно вытаскивать из списка 5 IP names, которые находятся на 5, 10, 15, 20 и 25-ом месте в списке если рандомное число к примеру 5.
Perl
1
2
3
4
5
6
7
8
my $counter =1
while(<DATA1>)
{
   if ( ( $totalrand <= $counter ) && !( $counter % $totalrand% ) ) {
      print DATA2 $_;
   }
   ++counter;
}
Както так.
1
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
27.09.2013, 12:40  [ТС] 3
Спасибо за код, но компилятор ругается. Можно попросить разъяснить, что за условие выполняется тут !( $counter % $totalrand% )

syntax error at C:\rand.pl line 4, near "% ) "
syntax error at C:\rand.pl line 8, near "}"
Bareword "counter" not allowed while "strict subs" in use at C:\rand.pl line 7.
Execution of C:\rand.pl aborted due to compilation errors.
0
348 / 298 / 164
Регистрация: 15.03.2012
Сообщений: 649
Записей в блоге: 1
27.09.2013, 14:10 4
Perl
1
2
3
4
5
6
7
8
my $counter =1
while(<DATA1>)
{
   if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
      print DATA2 $_;
   }
   ++counter;
}
Vot tak pravilno.
Jesli ostatok ot % Null=(0) to 4islo kratno delitelju, a v if nam nado 1, po etomu !($counter % $totalrand).
1
4 / 4 / 0
Регистрация: 06.10.2008
Сообщений: 65
27.09.2013, 14:27 5
Полный код

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
 
my DATA1;
open(DATA1,"file");
 
my $counter =1;
my $totalrand;
my DATA2;
 
while(<DATA1>)
{
if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
 print DATA2 $_;
}
++counter;
}
Так должно работать
0
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
27.09.2013, 15:38  [ТС] 6
Цитата Сообщение от СашаН Посмотреть сообщение
my $counter =1
while(<DATA1>)
{
* *if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
* * * print DATA2 $_;
* *}
* *++counter;
}
Благодарю все прекрасно работает, если в предпоследней строке добавить $, то есть ++$counter;

Добавлено через 3 минуты
Цитата Сообщение от Panchus Посмотреть сообщение
Полный код

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
 
my DATA1;
open(DATA1,"file");
 
my $counter =1;
my $totalrand;
my DATA2;
 
while(<DATA1>)
{
if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
 print DATA2 $_;
}
++counter;
}
Так должно работать
Спасибо, но my DATA1 так не декларируется. Выдает ошибку. Еще раз спасибо за ответ!

Добавлено через 7 минут
А как теперь можно ограничить counter? Если в списке 100 IP names, а мне нужно всего 5)
0
348 / 298 / 164
Регистрация: 15.03.2012
Сообщений: 649
Записей в блоге: 1
27.09.2013, 18:18 7
Цитата Сообщение от Misanthrop Посмотреть сообщение
А как теперь можно ограничить counter? Если в списке 100 IP names, а мне нужно всего 5)
Perl
1
2
3
4
5
6
7
8
9
10
my $counter =1;
my $max = 5;
while(<DATA1>)
{
   if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
      print DATA2 $_;
      if ((--$max) <= 0) {last};
   }
   ++$counter;
}
1
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
27.09.2013, 20:29  [ТС] 8
Цитата Сообщение от СашаН Посмотреть сообщение
Код Perl 61
2
3
4
5
6
7
8
9
10
my $counter =1;
my $max = 5;
while(<DATA1>)
{
* *if ( ( $totalrand <= $counter ) && !( $counter % $totalrand ) ) {
* * * print DATA2 $_;
* * * if ((--$max) <= 0) {last};
* *}
* *++$counter;
}
Тысячу благодарностей! Все отлично работает!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10870 / 6758 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
02.10.2013, 17:46 9
Просто на всякий случай: выводит наугад 3 из 10 ip адресов
Perl
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
use warnings;
 
my @ips = ( '192.168.0.1', '192.168.0.2', '192.168.0.3', '192.168.0.4', '192.168.0.5', '192.168.0.6', '192.168.0.7', '192.168.0.8', '192.168.0.9', '192.168.0.10' );
 
@ips = sort { int(rand(100)) - int(rand(100)) } @ips;
 
for ( my $i = 0; $i < 3; ++$i ) {
    print $ips[$i], "\n";
}
1
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
03.10.2013, 02:45  [ТС] 10
Цитата Сообщение от easybudda Посмотреть сообщение
@ips = sort { int(rand(100)) - int(rand(100)) } @ips;
А можно по подробнее об этой строке узнать? Разве нельзя использовать просто один int(rand(100))?
Спасибо!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10870 / 6758 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
03.10.2013, 08:40 11
Misanthrop, можно и один, но эффект не тот будет. Функция сравнения должна возвращать отрицательное целое, если первый элемент меньше второго, ноль, если равны, и положительное целое, если первый элемент больше. В моём варианте будет возвращаться случайное число от -100 до 100, в вашем от 0 до 100, то есть последовательность не слишком случайной окажется.
Другой вариант
Perl
1
{ int(rand(200)) - 100 }
но опять же минус элемент случайности...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2013, 08:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с файлами
Создать в редакторе текстовый файл, каждая строка которого содержит фамилию студента, пол, цвет...

Работа с файлами
У меня такой вопрос. Можно ли создавать каким-нибудь образом массив файлов. То есть, к примеру,...

работа с файлами
нужно написать программу которая будет копировать информацию из одного файла в другой и при этом...

Работа с файлами
Даны сведения о результатах сессии: ФИО студента, названия четырех предметов и оценки, полученные...

работа с файлами
Даны два файла целых чисел одинакового размера. Создать текстовый файл содержащий эти числа...

Работа с файлами
Есть вот такая вот проблема: нужно с файла *txt считать текст и от туда выбрать все цитаты (слова и...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.