Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
#1

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

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

Здрастуйте!
Подскажите, пожалуйста, как создать ключи командной строки?
Помню, что именно нужно использовать параметры функции main а как именно не помню
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 13:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ключи командной стоки (C++):

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

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

Сдвиг стоки вниз и Удаление столбцов Матрицы - C++
Добрый день! Возник вопрос! Как правильно сдвигать строчку в матрице? (своего рода сортировка) Мне нужно указанную строку переместить...

Произвольный доступ в файл. Лишний символ новой стоки - C++
Здравствуйте, помогите разобратся. #include <iostream> #include <fstream> using namespace std; int main(){ ifstream...

Ключи RSA - C++
Помогите, пожалуйста, разобраться с ключами для криптосистемы RSA :) А конкретнее с их генерацией, написать надо самому, реализован набор...

Передать аргументы и ключи - C++
Мне нужно чтобы вызывать прогу из консоли так: proga -f file.txt так получатеся что в argv - -f argv - file.txt а если ключей...

8
Johnny_D
Padawan
473 / 323 / 9
Регистрация: 30.01.2010
Сообщений: 1,842
02.03.2011, 14:21 #2
Смотрим сюда, читаем по буржуйски.
0
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
02.03.2011, 22:54  [ТС] #3
Спасибо! Статья мне помогла, в общих чертах разобрался, но всё таки есть вопросы которые я не понял.
Например, мне нужно чтобы в консольном приложении использовались несколько ключей, а именно выбор пути выбранного файла.
For example: c:/>analyser.exe /id: "c:/ligs/" /if: doc1.txt doc2.txt /o: report.dat
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.03.2011, 04:33 #4
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
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 13:29  [ТС] #5
Написал анализатор командной строки, но почему-то она не работает, пожалуйста, посмотрите на код свежим глазом и укажите на ошибки. Исходник ниже:
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
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.03.2011, 13:44 #6
/if: access-www.1.log
это два argv элемента: /if: и access-www.1.log
0
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 13:51  [ТС] #7
т.е. нужно создать двухмерный массив main(int argc, char **argv[][])?
И дальше с ним оперировать?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.03.2011, 14:02 #8
не, там передаётся всё правильно
обрабатывается только /if:, а нужно ведь дальше брать аргументы
допустим, /if: - это argv[i], а имена файлов - это argv[i + 1], argv[i + 2], ..., argv[i + n]

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

/o:report.dat - это один аргумент
/o: report.dat - это два аргумента
это надо пропускать через функцию, которая приведёт аргументы к нормальному виду
тогда можно будет определённо искать, что там задано
0
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
19.03.2011, 14:06  [ТС] #9
Сейчас буду думать как это сделать. Спасибо за подсказку
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 14:06
Привет! Вот еще темы с ответами:

Передача информации, используя ключи - C++
Два процесса обмениваются информацией через файлы. Нужно как-то согласовать её однозначное прочтение, для чего решил использовать ключи...

RSA. ключи. чего-то не расшифровывает - C++
по заданию насколько понял нужно используя открытым ключем RSA зашифровывать текст, а закрытым - расшифровать... шифровать - получается.....

Как сравнивать ключи из слов? - C++
Сортирую ключи из слов. Не могу понять, что больше a или bc, например, подскажите,плиз, и извините за бредовость)))) Вернее вроде и...

Как в функции открытия файла fopen() задать путь через ключи - C++
Как в функции открытия файла fopen() задать путь через ключи. Раньше путь задавался так: char...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
19.03.2011, 14:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru