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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти количество элементов, Извините за назойлевость:) 
:(
    Опции темы
C.Smoke
  Дата 16.2.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2005
Где: Сертолово(СПб)

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



Доброго времени суток!

Суть вопроса такова:
Есть фаил:
Код

001::10::150::text1      #первый пораметр-ID второй количество и т.д.
002::8::200::text2
001::1::150::text1
и т.д.


Необходимо найти:
сколько количество всех text1,text2 и т.д.
к примеру в этом случае сумма text1 равна 11

P.S. Я уже голову сломал smile
обьясните это я такой тормоз или это дествительно так непросто?

PM MAIL ICQ   Вверх
Wowa
Дата 16.2.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



алгоритмов несколько:

1.
Если известно ли кол-во разнообразных text, то можно:
Убрать всех \n таким образом данные будут все в одну строку расположены. Потом с помощью встроенных функци в perl можно посчитать кол-во вхождение определенного слова в строке.


2.
Создаем массив a[text][кол-во вхождений]
Пройтись по всем строкам в файле циклом while.
Отрезать первые три слобца и проверить наличие четвертого столбца в в массиве a[text]
Если значение найдено, то увеличиваем a[text][кол-во вхождений]=a[text][кол-во вхождений]+1;
если нет, то через push добавляем новый элемент в массив, а кол-во вхождение ставим 1.

PM WWW   Вверх
korob2001
Дата 17.2.2005, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

#!/usr/bin/perl -w
use strict;
# в переменной $file укажи путь к своему файлу
my $file = "total.txt";
my %cnt = ();
open( F, "< $file" ) or die $!;
while ( <F> ) {
    chomp;
    my( $col, $txt ) = ( split("::") )[1, 3];
    $cnt{ $txt } += $col;
}
close( F );

# Выводим в stdout результат
foreach ( sort { $a cmp $b } keys %cnt ) {
     print "$_ = $cnt{ $_ }\n";
}


Удачи


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
C.Smoke
Дата 18.2.2005, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2005
Где: Сертолово(СПб)

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



ОГРОМНОЕ СПАСИБО!
Всё работает! smile smile smile

Появился такой вопросик:
а как выводить ещё один параметр.
тоесть не только 1,3 а ещё и 2ой.

буду очень признателен за ответ:)

Это сообщение отредактировал(а) C.Smoke - 18.2.2005, 13:31
PM MAIL ICQ   Вверх
korob2001
Дата 20.2.2005, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Насколько я понял, второй столбец нужно тоже просумировать, если да, то вот код, если нет, то поясни подробнее.
Код

#!/usr/bin/perl -w
use strict;
my $file = "total.txt";
my %cnt = ();
open( F, "< $file" ) or die $!;
while ( <F> ) {
    chomp;
    my( $first, $second, $third ) = ( split("::") )[1..3];
    $cnt{ $third }{ first } += $first;
    $cnt{ $third }{ second } += $second;
}
close( F );

# Выводим в stdout результат
foreach ( sort { $a cmp $b } keys %cnt ) {
     print "$_ = " . $cnt{ $_ }{ first } . " = " . $cnt{ $_ }{ second } . "\n";
}

Удачи.

Это сообщение отредактировал(а) korob2001 - 20.2.2005, 22:17


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
C.Smoke
Дата 21.2.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2005
Где: Сертолово(СПб)

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



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


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

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


 




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


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

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