Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl массивы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

xatter

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собственно сам сабж, есть два файла к примеру data.txt и phone.txt, файл data.txt такого вида:
 
Адлер, Весёлое, дом сдан, 3/5, 33 кв.м, коммуникации городские, детская площадка, тихое спокойное место, с документами, 2.300.000 руб. Тел. 8-918-977-80-80.  
Адлер, 1,5-комн., новостройка, 47,6 кв.м, свободная планировка, витражное остекление, лифт, 150 м от моря, 5 мин. до остановки, 10 мин. от центрального рынка, срок сдачи - 4 кв. 2011 г., 2.570.000 руб. Тел. 8-988-141-18-00, 8-9882-376-531, Роман.  
Адлер, 28,6 кв.м, все центральные коммуникации, свет, вода, канализация, газ, 1.200.000 руб. Тел. 8-918-678-80-80, Алексей.  
Адлер, 3/5, 38,4 кв.м, черновая отделка, коммуникации городские, витражное остекление, рассрочка от застройщика, 1.612.800 руб. Тел. 8-918-404-40-83.  
Адлер, 40 кв.м, благоустроенный район, рядом рынок, школа, магазины, требует ремонта, 2.200.000 руб. Тел. 8-9882-377-229, 8-918-400-30-56.  
 
Файд phone.txt такго рода:
 
89184003056
89882376531
8-918-977-80-80
и.т.д.
 
Нужно сделать так что бы он проверял построчно из файла phone.txt с data.txt и если номера совпадали то он удалял из них строку, к примеру строка вида из data.txt
 
Адлер, 3/5, 38,4 кв.м, черновая отделка, коммуникации городские, витражное остекление, рассрочка от застройщика, 1.612.800 руб. Тел. 8-918-404-40-83.  
 
В phone.txt есть этот номер и он записан так:
 
89184044083
 
То строка из файла data.txt удалялась...
Пожалуйста подскажите как это можно организовать на перле, так как перл начал изучать пару дней назад и знаний не хватает)) ну а если не трудно будет то напишите маленький примерчик, заранее очень благодарен, очень надеюсь на вашу поддержку и помощь.
 
З.Ы. Данные из файла phone.txt должны пониматься и сравнивать корректно то есть скрипт должен понимать что 8-918-404-40-83 и 89184044083 или 8(918)404-40-83 одно и тоже

Всего записей: 1 | Зарегистр. 02-08-2011 | Отправлено: 11:38 02-08-2011
pka

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
 
#!perl
 
use strict;
 
my $i;
my $stroka = 'Адлер, Весёлое, дом сдан, 3/5, 33 кв.м, коммуникации городские, детская площадка, тихое спокойное место, с документами, 2.300.000 руб. Тел. 8-918-977-80-80.  
Адлер, 1,5-комн., новостройка, 47,6 кв.м, свободная планировка, витражное остекление, лифт, 150 м от моря, 5 мин. до остановки, 10 мин. от центрального рынка, срок сдачи - 4 кв. 2011 г., 2.570.000 руб. Тел. 8-988-141-18-00, 8-9882-376-531, Роман.  
Адлер, 28,6 кв.м, все центральные коммуникации, свет, вода, канализация, газ, 1.200.000 руб. Тел. 8-918-678-80-80, Алексей.  
Адлер, 3/5, 38,4 кв.м, черновая отделка, коммуникации городские, витражное остекление, рассрочка от застройщика, 1.612.800 руб. Тел. 8-918-404-40-83.  
Адлер, 40 кв.м, благоустроенный район, рядом рынок, школа, магазины, требует ремонта, 2.200.000 руб. Тел. 8-9882-377-229, 8-918-400-30-56.';
my @telefoni = ($stroka =~ m/[\d\-\(\)]+/g);
foreach $i (@telefoni) {
  $i =~ s/[-\(\)]//g;
  if (length($i) == 11) {
    print "$i\n";
    }
  }
 

 
Насколько я понял это наиболее сложная для Вас часть программы. Остальное легко напишите сами. Удачи.

Всего записей: 83 | Зарегистр. 16-03-2006 | Отправлено: 22:09 04-08-2011
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет
 
чтобы не плодить темы решил написать здесь
подскажите пожалуйста как дать имя массиву из скаляра?
 
что то типа такого
$sc='array';
@{$sc}=();
заранее благодарен

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 15:49 28-03-2013 | Исправлено: tolyn77, 15:55 28-03-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77
так вообще не рекомендуется делать.
используйте хэш
http://stackoverflow.com/questions/282647/does-perl-have-php-like-dynamic-variables
 
особенно кусок  

Цитата:
What you're attempting to do is called a "symbolic reference." While you can do this in Perl you shouldn't. Symbolic references only work with global variables -- not lexical (my) ones. There is no way to restrict their scope. Symbolic references are dangerous. For that reason they don't work under the strict pragma.

 
поэтому

Код:
#use strict;  
my $name = "test";
local @{$name} = ('1', '2');
print @test;

работает, но со strict не будет

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:19 29-03-2013 | Исправлено: Cheery, 03:20 29-03-2013
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо
отказался именовать массив из переменной
 
а еще вопрос, делаю массив хешей
push @array_sess, [ $sess[$i] => $sess[$j] ];
чего то в логике потерял, а как теперь достать их?
foreach ( @array_sess ) {
 while ( my ($key, $value) = each($_) ) {
  print "$key => $value\n";
 }
}
что я не так делаю?
заранее благодарен

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 10:54 01-04-2013 | Исправлено: tolyn77, 10:56 01-04-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77
http://www.cs.mcgill.ca/~abatko/computers/programming/perl/howto/hash/
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:57 01-04-2013
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
может что то не понял!?
foreach ( @array_sess ) {
 while ( my ($key, $value) = each(%$_) ) {
  print "$key => $value\n";
 }
}
 
но так тоже не работает!

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 11:22 01-04-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77

Цитата:
может что то не понял!?  

зачем вам массив хэшей, почему не сразу хэш?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:20 02-04-2013
mark74

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Название темы подходящее. Спрошу мнение общества )
 
Необходимо инициализировать нулями двумерный массив:
Почитав документацию сделал как показано ниже.
 

Код:
my @aa;
for my $y (0 .. $maxy) {
#    $aa[$y] = [];  #эта строчка что есть что нет; интересно почему
    for my $x (0 .. $maxx) {
        $aa[$y][$x] = 0;
    }
}

 
Есть ещё какие-нибудь варианты?

Всего записей: 480 | Зарегистр. 25-01-2009 | Отправлено: 15:16 30-01-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl массивы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru