Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3

Разбор аргументов командной строки, содержащие группы в скобках

28.09.2024, 16:40. Показов 637. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пожалуйста, не откажите в совете падавану.

Есть задача написать perl-скрипт, который должен из командной строки принимать аргументы примерно в следующем виде:

script.pl item1 item2 (item3 value1 ... valueN) item4… — и так далее в таком же духе, то есть может быть просто item, а может содержать некоторые дополнительные значения и тогда такой item вместе с ними помещается в скобки. Как наиболее рационально и безболезненно разобрать такие аргументы? Да, сторонними модулями пользоваться нельзя, только голый Perl сам по себе.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2024, 16:40
Ответы с готовыми решениями:

Разбор аргументов командной строки
Здравствуйте, нужно решить задачу но не знаю с его начать в командной строке вводится A.exeпробел/Uпробел/VEnter и программа должна...

Разбор аргументов командной строки
#!/usr/bin/python3.4 # -*- coding: UTF-8 -*- import sys import argparse import os import re def createParser (): ...

Разбор аргументов командной строки
Для Unix существуют специальные средства для разбора опций командной строки (функции GNU getopt и getopt_long). Хотелось бы узнать, есть ли...

6
 Аватар для abit
849 / 503 / 147
Регистрация: 03.02.2013
Сообщений: 1,643
28.09.2024, 17:26
Лучший ответ Сообщение было отмечено Ekfyr как решение

Решение

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
40
41
42
43
44
45
46
47
#!/usr/bin/perl
use strict;
use warnings;
 
my @input = @ARGV;
 
my @parsed_items;
my $current_item;
 
while (@input) {
    my $arg = shift @input;
    
   
    if ($arg =~ /^\(/) {
        
        $arg =~ s/^\(//;
        $current_item = [$arg]; 
        
        
        while (@input) {
            my $next_arg = shift @input;
            
            # Если аргумент заканчивается закрывающей скобкой
            if ($next_arg =~ /\)$/) {
                $next_arg =~ s/\)$//; 
                push @$current_item, $next_arg if $next_arg ne '';
                last; 
            } else {
                push @$current_item, $next_arg;
            }
        }
        
        push @parsed_items, $current_item;
    } else {
        # Если это просто одиночный элемент
        push @parsed_items, $arg;
    }
}
 
 
foreach my $item (@parsed_items) {
    if (ref $item eq 'ARRAY') {
        print "Item with values: (" . join(", ", @$item) . ")\n";
    } else {
        print "Single item: $item\n";
    }
}
2
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3
28.09.2024, 20:27  [ТС]
Премного благодарен!
0
 Аватар для volodin661
6566 / 2212 / 344
Регистрация: 10.12.2013
Сообщений: 7,620
28.09.2024, 21:27
my_proc.pl
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
 
my $expr  = join "," , @ARGV;
   $expr  =~ tr/()/[]/;
   $expr  =~ s/^/(/;
   $expr  =~ s/$/)/;
 
no strict;
@ARGV = eval $expr;
use strict;
 
$, = '|';
print ref eq 'ARRAY' ? @$_ : $_ for @ARGV;


Bash
1
perl my_proc.pl  aa 50 cc \(dd ee ff\) 100 \(xx yy zz\)
output:

Code
1
2
3
4
5
6
aa
50
cc
dd|ee|ff
100
xx|yy|zz
2
321 / 46 / 11
Регистрация: 08.04.2022
Сообщений: 177
28.09.2024, 22:04
Мне кажется, что все это можно решить с помощью стандартной библиотеки Getopt::Long
0
 Аватар для volodin661
6566 / 2212 / 344
Регистрация: 10.12.2013
Сообщений: 7,620
28.09.2024, 22:15
siberian-man, я так понимаю, задача учебная. для собеседования.
0
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3
29.09.2024, 00:50  [ТС]
Цитата Сообщение от siberian-man Посмотреть сообщение
Мне кажется, что все это можно решить с помощью стандартной библиотеки Getopt::Long
Например как?

Цитата Сообщение от volodin661 Посмотреть сообщение
я так понимаю, задача учебная. для собеседования.
Не для собеседования, но учебная. В том плане, чтобы научится это делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2024, 00:50
Помогаю со студенческими работами здесь

Проверка наличия параметра в командной строке // Проверка аргументов командной строки на наличие
Всем доброго времени суток. Возникла необходимость сделать небольшую защиту клиента, на проверку наличия параметра в CMD, если он есть...

Консоль, разбор командной строки
#include <iostream> int main(int ArgumentsCount, char **Arguments) { char **p; char **l; std::cout<<ArgumentsCount<<std::endl;...

Разбор параметров командной строки
Написать класс, который разбирает командную строку, переданную на вход программе. При создании объекта этого класса, он получает набор...

Считывание аргументов командной строки
Возникла проблема при считывании аргументов командной строки на плюсах, задача следующая у меня есть мое приложение которое принимает...

Ввод аргументов командной строки
Здравствуйте, такой вопрос: как задаются аргументы командной строки в си? нужно скомпилировать exe и запустить его через командную строку...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »