Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с написанием скрипта 
:(
    Опции темы
PalmOs
Дата 11.2.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Нужно написать скрипт с использованием модуля GD:Graph::lines
Подробнее: 
1. Читать файл в массив, обработать каждый элемент массива(пример элемента 223243 63243 -1 -3 21) оставить только второе число (63243), остальное удалить.
2. Нарисовать график по данным из массива
Вот небольшие наброски
открытие файла и чтение в массив:
open(INFO, "cookie_stats.txt") ;
@data=<INFO>;#Читаем строки в массив. 
close(INFO);
постотроение графика:
se CGI ':standard';
use GD::Graph::lines;
use strict;

# Подготовка данных, на основе которых будет строиться график.
my @data1 = (["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
             "Sep", "Oct", "Nov", "Dec"],
            [23, 5, 2, 20, 11, 33, 7, 31, 77, 18, 65, 52]);

my $mygraph = GD::Graph::lines->new(500, 300);
$mygraph->set(
    x_label     => 'Month',
    y_label     => 'Koli4estvo posetitelei',
    title       => 'Stat',
) or warn $mygraph->error;


my $mygraph = $mygraph->plot(\@data1) or die $mygraph->error;

# Открываем файл на запись 
open(PICTURE, ">picture1.png") or die("Cannot open file for writing");


# Не забудьте включить бинарный режим 
binmode PICTURE;

# Конвертируем изображение в PNG формат и выводим его в файл
print PICTURE $mygraph->png;
close PICTURE;
my $mygraph = GD::Graph::lines->new(500, 300);
$mygraph->set(
    x_label     => 'Den Nedeli',
    y_label     => 'Koli4estvo posetitelei',
    title       => 'Stat',
) or warn $mygraph->error;

-----------------------------------------------------------
p.s сильно не бейте, новичок в Perle

Это сообщение отредактировал(а) PalmOs - 11.2.2008, 12:56
PM MAIL   Вверх
shamber
Дата 11.2.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



а что нужно? или я пропустил вопрос?
PM MAIL Jabber   Вверх
PalmOs
Дата 11.2.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



1. Читать файл в массив, обработать каждый элемент массива(пример элемента 223243 63243 -1 -3 21) оставить только второе число (63243), остальное удалить.
2. Нарисовать график по данным из массива
PM MAIL   Вверх
shamber
Дата 11.2.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



PalmOs, тему назовите осмысленно, а то что это за помогите. хотябы в заголовок название модуля напишите.

Добавлено через 5 минут и 55 секунд
Цитата(PalmOs @  11.2.2008,  13:06 Найти цитируемый пост)
 Читать файл в массив

вы у же писали.
Цитата(PalmOs @  11.2.2008,  13:06 Найти цитируемый пост)
 обработать каждый элемент массива

примерно так, хотя можно и лучше
Код


map { $_ =~ s/^\d+\s(\d+)\s.*/$1/ } @data;



PM MAIL Jabber   Вверх
amg
Дата 11.2.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(PalmOs @  11.2.2008,  12:55 Найти цитируемый пост)
1. Читать файл в массив, обработать каждый элемент массива(пример элемента 223243 63243 -1 -3 21) оставить только второе число (63243), остальное удалить.
Более эффективно будет не читать весь файл в массив, а обрабатывать строки по мере чтения файла и в массив заносить только то, что нужно.
Код

open INFO, '<', "cookie_stats.txt" or die "Can't read cookie_stats.txt: $!\n";
push @data, (split)[1] while <INFO>;
close INFO;


PM MAIL   Вверх
PalmOs
Дата 11.2.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Спасибо за советы!
Теперь осталось по этим данным постройть график, например 1 элемент массива это за данные за понедельник, 2 - за вторник, 3 - за среду. 
Кто что подскажет?
---------
Сейчас код выглядит так и он не хочет строить график, в него нужно добавить выше написанное:
Код

#! C:/Perl/bin/perl.exe

use CGI ':standard';
use GD::Graph::lines;


open INFO, '<', "cookie_stats.txt" or die "Can't read cookie_stats.txt: $!\n";
push @data, (split)[1] while <INFO>;
close INFO;
print "size of array: " . @data . ".\n";
print "@data\n";


my $mygraph = GD::Graph::lines->new(500, 300);
$mygraph->set(
    x_label     => 'Den',
    y_label     => 'Koli4estvo posetitelei',
    title       => 'Stat',
) or warn $mygraph->error;


my $mygraph = $mygraph->plot(\@data) or die $mygraph->error;

# Открываем файл на запись 
open(PICTURE, ">picture1.png") or die("Cannot open file for writing");


# Не забудьте включить бинарный режим 
binmode PICTURE;

# Конвертируем изображение в PNG формат и выводим его в файл
print PICTURE $mygraph->png;
close PICTURE;




Это сообщение отредактировал(а) PalmOs - 11.2.2008, 17:15
PM MAIL   Вверх
amg
Дата 12.2.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Конечно не хочет строить график, массив @data неправильный (должен быть массивом массивов).
Код

use GD::Graph::lines;

my @data = ([qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)]);

open INFO, '<', "cookie_stats.txt" or die "Can't read cookie_stats.txt: $!\n";
push @{$data[1]}, (split)[1] while <INFO>;
close INFO;
die "Error in \@data\n" if $#{$data[0]} != $#{$data[1]};

my $mygraph = GD::Graph::lines->new(500, 300);
$mygraph->set(
    x_label     => 'Den',
    y_label     => 'Koli4estvo posetitelei',
    title       => 'Stat',
) or warn $mygraph->error;

open PICTURE, ">", "picture1.png" or die "Cannot open file for writing";
binmode PICTURE;
print PICTURE $mygraph->plot(\@data)->png or die $mygraph->error;
close PICTURE;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.