Сейчас на форуме: Kybyx (+3 невидимых) |
![]() |
eXeL@B —› Оффтоп —› Perl - Подсчет элементов с учетом второго параметра |
Посл.ответ | Сообщение |
|
Создано: 30 июля 2014 21:05 · Поправил: mak · Личное сообщение · #1 Приветствую всех .. есть ли тут знатоки Перл?! Я не разбираюсь в перл, но написать задачу нужно именно на Перл, поэтому другой язык использовать не могу. Имеется текстовый документ, где в каждой строке записаны данные в формате Code:
Мне нужно посчитать количество конкретного элемента, который находится в 6 ом столбце, только один раз учитывая 4 столбец с возрастающими номерами, например IDD_4 .. то есть учитывая 4 стобец, где в пределах индекса номер один результат подсчета может быть только 1 или 0 .. если же там два элемента, учитываться будет только один, из двух или трех IDD_4, в любом одинаковом индексе будет подсчитан только один. Результат подсчета этого отрывка должен быть 6 и всего их 6 конечно, пример не совсем удачный .. но идея думаю понятна. Раньше я считал все подряд, скрипты как считал все подряд загрузил на РГхост. Файлов много, поэтому я сделал изврат из бат файлов, где я могу вызывать все файлы последовательно и через Бат файл сохранить результаты подсчета. Помогите пожалуйста с реализацией счета по двум параметрам ... П.С. В архиве лежит файл Search.pl, мне уже пытались помочь, но этот скрипт не работает так как надо. Во первых файл читается из самого перл скрипта, а мне надо чтобы передавался как параметр из БАТ файла как уже сделано у меня. В таком случае у меня не получается сделать сплит, разделение по условию пробел и запятая, так как я не знаю как поймать хэндл в перл скрипте от передаваемого из бат файла имени .. Проблема вторая в этом скрипте, он учитывает индекс только как число от одного и выше ... в моих данных числа идут с дополнительными нулями впереди, что делает эту методику мало функциональной. Я уже сильно замучился с этой простой задачей ... но решить ее мне надо к сожалению Перл скриптом, иначе бы не возникло вообще никаких вопросов! .. Спасибо за отклик! Ссылка ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 30 июля 2014 21:14 · Поправил: reversecode · Личное сообщение · #2 Code:
без Code:
и сможешь файл в командную строку подсовывать что кого куда как посчитать.., с остальным нихрена не понятно ![]() |
|
Создано: 30 июля 2014 21:43 · Поправил: mak · Личное сообщение · #3 reversecode Спасибо! Я попробую этот вариант .. Не знаю как проще объяснить, ищется количество IDD_4 во всем файле, без учета повторений в индексах которые начинаются с 0000 .... Если будет так ... ищем IDD_4 Code:
Рузультат будет 1 , а не 3 Добавлено - IDD_5 или другой это не так важно, так как в целом нужно считать только один из них, а систематика останется одинаковой, поменяется только IDD_5 к примеру, а индекс останется и алгоритм тоже. Рузультат будет 1 , а не 3 потому что 00001 все три раза одинаковые? Да, именно так, так как индекс одинаковый, количество одинаковых индексов может быть разным, но сам индекс всегда возрастает, от 00001 и до предела. Запись в порядке следования 3 ий индекс а потом первый не может быть правильной изначально, это хорошо видно в самом файле Data.txt Code:
Код Code:
В файле Data.txt есть определенная структура, которая не требует сортировки, так как в целом все строчки уже есть продукт сортировки. ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 30 июля 2014 21:49 · Поправил: reversecode · Личное сообщение · #4 если ты айтишник - значит должен уметь доходчиво объяснить без учета повторений индексов, зачем тогда вообще все эти поля? тупо посчитай общее количество последнего поля которое IDD_ тогда вообще можно посчитать количество строк ведь во всех у них последнее поле IDD или исключительно 'IDD_4' ищется? Добавлено спустя 34 минуты mak пишет: Рузультат будет 1 , а не 3 потому что 00001 все три раза одинаковые? а если так то 2 ? 01.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_1, IDD_4 02.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_2, IDD_4 03.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_3, IDD_4 04.Data1, Namber, 02.01.2014 06:26:46, 00002, Data3_1, IDD_4 05.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_2, IDD_4 06.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_3, IDD_4 а так то 3 ? 01.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_1, IDD_4 02.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_2, IDD_4 03.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_3, IDD_4 04.Data1, Namber, 02.01.2014 06:26:46, 00002, Data3_1, IDD_4 05.Data1, Namber, 02.01.2014 06:26:46, 00003, Data3_2, IDD_4 06.Data1, Namber, 02.01.2014 06:26:46, 00001, Data3_3, IDD_4 я правильно понимаю что нужно сначала выбрать все поля у которых есть IDD_4 а потом сгруппировать по 6 столбцу и узнать количество уникальных ? Добавлено спустя 1 час 58 минут оффтоп не является разделом форума, здесь нет смысла редактировать сообщения! так, после того как выбрали IDD_4 , последовательность самих индексов как то должны учитываться? или все же можно их uniq и count ? ![]() |
|
Создано: 31 июля 2014 07:38 · Поправил: mak · Личное сообщение · #5 reversecode пишет: так, после того как выбрали IDD_4 , последовательность самих индексов как то должны учитываться? или все же можно их uniq и count ? Последовательность самих индексов не учитывается, их можно сделать uniq и count, не учитывая остальные параметры строчки. На длину строчек ориентироватья нельзя, так как она всегда разная из-за параметра Data1, Namber, который тоже не должен учитываться. Поэтому указать точно положение сравниваемых данных нельзя. Так я уже через блокнот пробовал. reversecode пишет: Добавлено спустя 1 час 58 минут оффтоп не является разделом форума, здесь нет смысла редактировать сообщения! Это верно, но есть другие закономерности, которых я хочу избегать ![]() ![]() Добавлено спустя 10 часов 14 минут reversecode Спасибо за совет с хэндлом, этот вопрос решен ... теперь остается только два вопроса, как убирать нули перед индексом? Чтобы я мог нормально применить уже имеющийся скрипт, данные обновленные я загрузил на ргхост ... И второй вопрос, т.к. мне надо считать всего лишь один параметр IDD_4 к примеру, то условия Code:
не подходят, должно быть только одно условие - IDD_4, если же я делаю одно иф условие, скрипт останавливается на неизвестном параметре который отличается от IDD_4, неизвестный параметр должен просто пропускаться. Как можно изменить эту запись? Нули я пробовал убирать разными методами, один из них это Code:
Ссылка ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 01 августа 2014 03:50 · Личное сообщение · #6 |
|
Создано: 01 августа 2014 07:44 · Поправил: mak · Личное сообщение · #7 Zorn пишет: mak пишет: Нули я пробовал убирать разными методами, один из них это ... s/\0+$//; Регулярка не правильная. s/^0+// mak пишет: параметр $data2_value не инициализирован Нужно чтобы до этого в $data2_value была эта самая цифра с ведущими нулями. Попробую сегодня, я делал Принт для проверки наличия в ячейках информации, там лежит все что нужно, но я сделаю еще раз тест. Всем спасибо, решено! ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
![]() |
eXeL@B —› Оффтоп —› Perl - Подсчет элементов с учетом второго параметра |