Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
.NET 6

CommandLine Parser без нагета

04.07.2022, 13:03. Показов 781. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой парсер аргументов командной строки без пакетов
C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args)
        {
            for (int i = 0; i < args.Length; i++)
                if (args[i].StartsWith("-") || args[i].StartsWith("/"))
                    switch (args[i].Substring(1).ToLower())
                    {
                        case "print": Console.WriteLine(args[++i]); break;
                        case "win": Console.WriteLine("Win"); break;
                        case "help": case "?": ShowHelp(); break;
                        default: Console.WriteLine("No valid argument\nTry ProgName -Help"); break;
                    }
        }
Оцените
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2022, 13:03
Ответы с готовыми решениями:

CommandLine Parser - Примеры
Объясните мне пожалуйста как работает CommandLine Parser Как его настраивать и покажите примеры :wall: ПАМАГИТИ АПЯТЬ

Работа с CommandLine
Здравствуйте, уважаемые формульчане! Стокнулся с некоторой проблеммой: открытие нескольких файлов с помощью командной строки. Если...

Получить командную строку (CommandLine|arguments) процесса без прав администратора
Задача: Необходимо получить параметры запуска всех процессов. Если получать данные через Process.GetProcesses() и в нем...

13
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
04.07.2022, 13:12
Timchik230, а если параметр начинается не с "-" и "/", то ваш парсер промолчит. Если после print аргументов не будет, то тупо свалится. Такое себе решение.
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
04.07.2022, 13:28  [ТС]
Usaga, Всего лишь паттерн, можно ведь улучшить

Цитата Сообщение от Usaga Посмотреть сообщение
Если после print аргументов не будет, то тупо свалится.
Тоже самое, просто пример для команды

Добавлено через 13 минут
C#
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
static void Main(string[] args)
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (!args[i].StartsWith("-") || !args[i].StartsWith("/") || args.Length == 0)
                {
                    Console.WriteLine("No valid arguments !\nTry ProgramName -Help");
                    Environment.Exit(1);
                }
                else
                {
                    switch (args[i].Substring(1).ToLower())
                    {
                        case "print":
                            {
                                string arg = args[++i];
                                if (arg.Length == 0)
                                    Console.WriteLine("'Print' command error");
                                else
                                    Console.WriteLine(arg);
                                break;
                            }
 
                        case "win": Console.WriteLine("Win"); break;
                        case "help": case "?": ShowHelp(); break;
                        default: Console.WriteLine("No valid argument\nTry ProgName -Help"); break;
                    }
                }
            }
        }
Пожалуйста
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
04.07.2022, 13:34
Timchik230, теперь попёрла копипаста. Ну и парсер свалится, если после print не будет параметра. Да и разбор параметров идёт вперемешку с исполнением команд. Чуть сложнее это исполнение и в этой лапше разобраться станет сложно.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.07.2022, 13:37
Такой себе парсер. Если нужна чуть более сложная логика, sub-команды и т.д. то у вас такой спагетти-код получится что даже страшно представить...
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
04.07.2022, 13:55  [ТС]
Так Нада?

C#
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
48
49
50
51
52
namespace CommandLine
{
    class Parser
    {
        private static bool win;
        private static bool help;
 
        static void Main(string[] args)
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (args.Length > 0)
                {
                    if (args[i].StartsWith("-") || args[i].StartsWith("/"))
                    {
                        switch (args[i].Substring(1).ToLower())
                        {
                            case "win": win = true; break;
                            case "help": case "?": help = true; break;
                            case "print": Console.WriteLine(args[++i]); break;
                            default: Console.WriteLine("No valid argument\nTry ProgName -Help"); break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("No valid arguments !\nTry ProgName -Help");
                        Environment.Exit(1);
                    }
                }
                else
                {
                    Console.WriteLine("No valid arguments !\nTry ProgName -Help");
                    Environment.Exit(1);
                }
            }
 
            if (win)
                Console.WriteLine("Win");
 
            if (help)
                ShowHelp();
        }
 
        static void ShowHelp()
        {
            Console.WriteLine(
                "Commands : \n" +
                "/Win - prints 'Win'\n" +
                "/Help, /? - Show this help message");
        }
    }
}
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
04.07.2022, 14:59
Timchik230, такое себе, ну и парсер свалится, если после print не будет параметра,
парсер надо делать в отдельном классе чтобы отделить мух от котлет, так же парсер должен парсить параметр+опции и складывать это все в dictionary<string,List<string>> и возвращать его если парсинг удался, таким образом сразу будет проверка на то что 1 параметр задан дважды, все параметры и их опции будут в одном месте и всегда по параметру можно будет понять есть ли у него опции и вытащить его из списка опций.

Если не хочется тащить целый нугет пакет к себе в приложение, то можно просто скопировать к себе нужные классы с Git, а не придумывать велосипед и вставлять себе палки в колеса.
1
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
04.07.2022, 15:15
Timchik230, еще больше копипасты, и все такая же неустойчивость к кривым входным данным)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.07.2022, 16:16
Цитата Сообщение от Timchik230 Посмотреть сообщение
без нагета
Ньюгета или нюгета. Ну или нугета, на худой конец. Но никак не нагета.

Цитата Сообщение от Timchik230 Посмотреть сообщение
Мой парсер аргументов командной строки без пакетов
А зачем велосипед изобретать и заново наступать на все грабли?
Есть же готовое и протестированное решение.
0
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
04.07.2022, 22:13  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А зачем велосипед изобретать и заново наступать на все грабли?
Есть же готовое и протестированное решение.
Мой парсер пойдет для базовых задач
или если нет инета чтобы скачать готовый)))

Добавлено через 1 минуту
Опять же только учусь писать под шарп)
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
05.07.2022, 05:13
Timchik230, ну, как уже выше заметили и неоднократно: ваш парсер будет падать на базовых задачах. Так что если уж учиться, то как следует. Лучше перепишите свой парсер.
1
32 / 12 / 5
Регистрация: 02.04.2022
Сообщений: 331
18.01.2023, 21:19  [ТС]
Блин, пересматриваю свои старые темы и думаю, ну вот какой дебил это здесь оставил)))
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,678
Записей в блоге: 3
18.01.2023, 21:31
Цитата Сообщение от Timchik230 Посмотреть сообщение
или если нет инета чтобы скачать готовый)))
так если нет инета, то до твоего как доберутся? Или это акция "Мой парсер в каждый дом с доставкой"?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.01.2023, 00:01
Цитата Сообщение от Timchik230 Посмотреть сообщение
пересматриваю свои старые темы и думаю, ну вот какой дебил это здесь оставил
Ну дык это ничем не отличается от отслеживания прогресса в любых других сферах деятельности.
Если при взгляде на свой полугодовалый код или идею не хочется сесть и заплакать, то никакого роста за это время не было.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2023, 00:01
Помогаю со студенческими работами здесь

CommandLine C++ и MSDN Code
Простое Win32 окно, выдаёт ошибку! Unresolved external 'WinMain' referenced from \LIB\C0W32. OBJ Как можно собирать в безплатном...

Передать значение через CommandLine
Здравствуйте.Можно пример как передать аргумент &quot;C:\JVM\java\Java\bin\java.exe&quot; -jar agent.jar 2&gt;errors\starter-745.txt&quot; через...

Файл с пробелами не передаётся StartupNextInstanceEventArgs и e.CommandLine(0)
Я использую вот такой код: Проблема в том что файл с пробелами не передаётся а без пробелов прекрасно работает. Namespace My ...

Получить строку (CommandLine), по которой запущен процесс Windows
Приветствую, коллеги-программисты! Я сам программист 1С, но для определённых нужд мне потребовалось написать своё приложение для...

Альтернативные бат-файлы компиляции приложений для Free Commandline tools BC102
Предлагаю альтернативные .BAT-файлы компиляции приложений для Embarcadero Free Commandline tools BC102 rem make_conBC102.bat ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru