Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чем заменить getopt в microsoft visual studio  (Прочитано 18951 раз)
0 Пользователей и 1 Гость смотрят эту тему.
reagentSV
Гость
« : 10-08-2010 09:11 » 

Доброго времени суток.
я перешрл на мелкосовтовский компилятор с gcc.
Решил написать консольную программу.
раньше я пользовался функция getopt(...) и getopt_long (). для получения и обработки (argc, argv[] )

какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] )

благодарю за внимание.
« Последнее редактирование: 10-08-2010 09:46 от Джон » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 10-08-2010 09:16 » 

MFC, а не MFS  )

например
CWinApp::m_lpCmdLine;
 (theApp.m_lpCmdLine)

Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 10-08-2010 09:52 » 

Решил написать консольную программу.

Цитата
какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] )

Если имеется ввиду MFC, то в консольной программе он тебе не нужен, а параметры находятся (как ни странно) в массиве argv, который передаётся (как ни странно) в ф-ю main в качестве параметра. Соответственно доступ к ним:

argv[0]
argv[1]
argv[2]
...
и тд


Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
reagentSV
Гость
« Ответ #3 : 10-08-2010 10:12 » 

примерчиком поделитесь
Записан
reagentSV
Гость
« Ответ #4 : 10-08-2010 10:15 » 

Решил написать консольную программу.

Цитата
какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] )

Если имеется ввиду MFC, то в консольной программе он тебе не нужен, а параметры находятся (как ни странно) в массиве argv, который передаётся (как ни странно) в ф-ю main в качестве параметра. Соответственно доступ к ним:

argv[0]
argv[1]
argv[2]
...
и тд




их надо от туда выкавыривать.
а я хочу что бы функция возвращала структуру в виде ключей и значений прямо из командной строки.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 10-08-2010 10:52 » 

их надо от туда выкавыривать.

Я не знаю, что такое "от туда выкавыривать" и никогда не пользовался этой функцией. Сорри, gcc не знаю.

Цитата
а я хочу что бы функция возвращала структуру в виде ключей и значений прямо из командной строки.

Структуру чего? Каких ключей? Мы наверное говорим о разных вещах. Я вот что имею ввиду, допустим твоя прога называется myprog, тогда:

myprog parm0 parm1 parm2 parm3

где parm0 .. parm3 - параметры, помещаемые в массив argv. Какие ключи? Какие значения?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
reagentSV
Гость
« Ответ #6 : 10-08-2010 11:17 » 

моя програ называеться myprog Тогда
myprog --param=10 --param1 -- param=200 --param=FILE
алгорит следующих действий в программе я вижу такой
for (int i=0; i<=argc; i++ ) getopt (argc,argv, typestruct);
и я получаю обратно структуру для каждого i значения
struct
{
char *param;
int val;
void *file;
}typestruct

Вот что то топо такого..
Записан
reagentSV
Гость
« Ответ #7 : 10-08-2010 11:20 » 

соответственно где
struct
{
char *param; //имя параметра
int val;        // значение параметра , если он есть
void *file;   //указатель на фаил, если он есть
}typestruct;
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #8 : 10-08-2010 11:33 » 

reagentSV, быстрый ответ от гугла:
http://www.codeguru.com/forum/showthread.php?t=393293
http://www.codeproject.com/KB/cpp/xgetopt.aspx

http://www.google.ru/search?q=MFC+getopt
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 10-08-2010 12:29 » 

reagentSV, ну ты лентяй. Ага Получается у программы только один параметр, с кучей полей данных? А откуда ф-я знает, что надо = в качестве разделителя использовать? Т.е. если я, например, вызову:

myprog --param:10 --param1: -- param:200 --param:FILE

то уже не будет работать? Ага Это ж уже твоя логика. Да и ручками тут работы на пять минут, даже с возвращаемой структурой.

Вот, baldr, золотой души человек, ведь не поленился, погуглил, нашёл. Эт наверное потому, что у него сегодня День варенья. Так что считай, что повезло.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #10 : 10-08-2010 12:37 » 

 Краснею
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
zuuuuk
Постоялец

ru
Offline Offline

« Ответ #11 : 10-08-2010 17:28 » 

благодарю за помощь.
baldr c днем рождения
Записан
zuuuuk
Постоялец

ru
Offline Offline

« Ответ #12 : 10-08-2010 18:10 » 

у меня проблема с visual studio  по сравнению с dec-cpp
я пишу в dev-cpp
printf ("%s\n", argv[1]);
в консоли получаю первый параметр котрый забивал. любой длинны

если пользую висул студио
cout<< argv[1]<< endl;
или
printf ("%s\n", argv[1]);
в консоли он выдает только первый сивол параметра.

в чем спицифика. или я  что то делаю не так.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 10-08-2010 20:31 » 

Есть устойчивое подозрение, что виновен юникод. Какой тип имеет argv? Что будет, если сделать wprintf(L"%s\n", argv[1])?
Записан
Anchorite
Гость
« Ответ #14 : 11-08-2010 05:16 » 

Погляди boost::program_options.
Может подойдет.
Хотя для меня эта либа показалась слишком уж мудреной
« Последнее редактирование: 11-08-2010 05:19 от Anchorite » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 11-08-2010 06:35 » new

Сорри, неправильно понял условие. Ключевое слово "первый символ". Согласен в Вадом - обрезка по нулю.
« Последнее редактирование: 11-08-2010 06:56 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines