Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55

Ключи командной стоки

02.03.2011, 13:40. Показов 2911. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрастуйте!
Подскажите, пожалуйста, как создать ключи командной строки?
Помню, что именно нужно использовать параметры функции main а как именно не помню
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2011, 13:40
Ответы с готовыми решениями:

Неверное распознавание аргументов командной стоки
Если запускаю программу так: java -jar Program.jar J:\ *.? метод main получает аж 6 аргументов, которые содержат какие-то непонятные...

Передать параметры в скрипт через ключи командной строкии
Привет всем! Обясните мне, непутевому, как передать входящие параметры в скрипт с консоли? Хочу сделать следующее: - подключиться...

Ключи, ключи, ключики. нужен совет
Дорого времени суток. Народ помогите пожалуйста разобраться с проблемой ключей в 1С 8.3.6.2237. Рассказываю ситуевину: Короче у нас...

8
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
02.03.2011, 14:21
Смотрим сюда, читаем по буржуйски.
0
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
02.03.2011, 22:54  [ТС]
Спасибо! Статья мне помогла, в общих чертах разобрался, но всё таки есть вопросы которые я не понял.
Например, мне нужно чтобы в консольном приложении использовались несколько ключей, а именно выбор пути выбранного файла.
For example: c:/>analyser.exe /id: "c:/ligs/" /if: doc1.txt doc2.txt /o: report.dat
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.03.2011, 04:33
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    if (argc > 1) {
        printf("have arguments\n");
        if (argc == 8) {
            printf("have 7 arguments\n");
            if (strcmp(argv[1], "/id:") == 0)
                path = argv[2];
            if (strcmp(argv[3], "/if:") == 0) {
                infile1 = argv[4];
                infile2 = argv[5];
            }
            if (strcmp(argv[6], "/o:") == 0)
                outfile = argv[7];
        }
    }
может пригодиться
C
1
2
3
4
5
6
7
8
9
10
11
12
13
/* ищет индекс аргумента arg в списке аргументов argv;
   возвращает индекс 0, 1, ..., n , или отрицательное число
   в случае отсутствия аргумента в списке */
int index_of_arg(const char *arg, char **argv)
{
    char *p;
    int i;
    
    for (i = 0; (p = *argv) != NULL; i++, argv++)
        if (strcmp(arg, p) == 0)
            return i;
    return -1;
}
0
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 13:29  [ТС]
Написал анализатор командной строки, но почему-то она не работает, пожалуйста, посмотрите на код свежим глазом и укажите на ошибки. Исходник ниже:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
bool AnalizKomandnouSroki(int argc, char *argv[])
{   
    string VhodFiledir;
    list<string> VhodFilenames;
    string VuhodFilename;
 
    unsigned threadIDRead[8];
    unsigned threadIDAnaliz[8];
    HANDLE hThreadRead[8];
    HANDLE hThreadAnaliz[8];
    int Koli4estvoPotokov;
    
    /// Vspomagatelnue parametru dlya vuvoda
    int KolZapywenuhPotokov4teniya;
    int KolZapywenuhPotokovAnaliza; 
    int KolZaverwonnuhPotokov4teniya;
 
    bool RezyltatAnaliza = true;
    bool SpisokFaulov = false;
    
    for(int i = 0; i < argc; i++)
    {   
        string temp(argv[i]);
        if(temp.compare(0,4, "/id:") == 0)
        {
            VhodFiledir = temp.substr(4, temp.length() - 4);
            SpisokFaulov = false;
            continue;
        }
        
        if(temp.compare(0,4, "/if:") == 0)
        {
            VhodFilenames.push_back(temp.substr(4, temp.length() - 4));
            SpisokFaulov = true;
            continue;
        }
        
        if(temp.compare(0,3, "/o:") == 0)
        {
            VuhodFilename = temp.substr(3, temp.length() - 3);
            SpisokFaulov = false;
            continue;
        }
        
        if(temp.compare(0,1, "?") == 0)
        {
            RezyltatAnaliza = false;
            break;
        }
        
        if (SpisokFaulov)
        {   
            VhodFilenames.push_back(temp);
        }       
    }
    
    if ((VhodFiledir.empty()) || (VhodFilenames.empty()))
    {
        RezyltatAnaliza = false;
        cout << "ERROR. Ne zapolnen pyt k diriktorii ili ne zadanu faulu dlya analiza!" << endl << endl;
    }
 
    Koli4estvoPotokov = (int)VhodFilenames.size(); 
 
    return RezyltatAnaliza;
}
где
/id:<filedir> – полный путь к директории, в которой хранятся файлы логов для
анализа. Данный параметр является обязательным, если он не указан, то
происходит вывод на экран соответствующего сообщения и подсказки по
использованию данного приложения.
• /if:<filenames> - перечисление имен файлов логов через пробел, которые
необходимо проанализировать. Файлы обязаны находится в директории
указанной с помощью ключа /id. Данный ключ позволяет осуществлять
выборочный анализ файлов логов.
• /o:<filename> – полный путь к файлу, либо имя файла, который будет хранить
отчет. Если данный параметр не указывается, то вывод производится на экран.
• /thr:<threads count> - количество потоков, которые будут производить чтение
данных из файлов. По умолчанию используется 2 потока.
• /tha:<thread count> - количество потоков, которые осуществляют анализ
прочитанные записи лога и формируют статистику.
• /? - вывод информации о допустимых ключах командной строки.
Пример
C:/>analyser.exe /id:”c:/logs/” /if: access-www.1.log access-www.2.log access-www.3.log
/o:report.dat
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.03.2011, 13:44
/if: access-www.1.log
это два argv элемента: /if: и access-www.1.log
0
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 13:51  [ТС]
т.е. нужно создать двухмерный массив main(int argc, char **argv[][])?
И дальше с ним оперировать?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.03.2011, 14:02
не, там передаётся всё правильно
обрабатывается только /if:, а нужно ведь дальше брать аргументы
допустим, /if: - это argv[i], а имена файлов - это argv[i + 1], argv[i + 2], ..., argv[i + n]

так что нужно искать следующую опцию после /if:
а потом брать то, что между /if: и той опцией

/o:report.dat - это один аргумент
/o: report.dat - это два аргумента
это надо пропускать через функцию, которая приведёт аргументы к нормальному виду
тогда можно будет определённо искать, что там задано
0
7 / 7 / 1
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 14:06  [ТС]
Сейчас буду думать как это сделать. Спасибо за подсказку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2011, 14:06
Помогаю со студенческими работами здесь

Ввести 3 стоки и 1 число
Мне нужно ввести 3 стоки и 1 число, пример: scanf(&quot;%s %d %s %s&quot;, &amp;info.name, &amp;info.unn, &amp;info.fio, &amp;info.date); первая строка...

Удаление стоки в ListBox
Добрый вечер. Подскажите пожалуйста, как можно удалить в строчку listbox, в программе, при выборе в другом listboxe функции удалить??...

Чтение длинной стоки из файла
Добрый день! Подскажите, пж, никак не могу считать из файла длинную строку. есть файл со строками (около 50). каждая строка порядка 250...

Удаление повторяющихся слов из стоки на C
Здравствуйте. Помогите пожалуйста реализовать задачу: Дана строка. Группа символов разделленая одним или несколькими пробелами считается...

Убрать повторные стоки в datagridview
Есть datagridview состоящий из одного столбца как можно удалить повторные стоки?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru