Re[4]: переносимое консольное приложение с текстовыми аргументами в
От: _hum_ Беларусь  
Дата: 22.12.16 18:12
Оценка:
Здравствуйте, Dair, Вы писали:

D>Здравствуйте, _hum_, Вы писали:


D>>>В случае, если на входе один файл и на выходе один файл, можно вообще читать из stdin, писать в stdout и решать проблему типа

__>>пропустили "и что-то там сделать"

D>
$ (cat infile | ./myprogram > outfile) && mv outfile infile


параметры того, "что сделать", в командной строке
Re[5]: переносимое консольное приложение с текстовыми аргументами в
От: Dair Россия https://dair.spb.ru
Дата: 22.12.16 18:14
Оценка:
Здравствуйте, _hum_, Вы писали:

__>параметры того, "что сделать", в командной строке


Ну тогда ой.

А что, в windows нет простого int main(int argc, char** argv)? Это же стандарт, вроде.
Re[6]: переносимое консольное приложение с текстовыми аргументами в
От: _hum_ Беларусь  
Дата: 22.12.16 18:43
Оценка:
Здравствуйте, Dair, Вы писали:

D>Здравствуйте, _hum_, Вы писали:


__>>параметры того, "что сделать", в командной строке


D>Ну тогда ой.


D>А что, в windows нет простого int main(int argc, char** argv)? Это же стандарт, вроде.


есть только элементами argv[i] являются зависящие от платформы мультибайтовые последовательности (ascii, utf-16, utf-8 и проч.)
Re[8]: переносимое консольное приложение с текстовыми аргуме
От: _hum_ Беларусь  
Дата: 22.12.16 20:35
Оценка:
Здравствуйте, TimurSPB, Вы писали:

TSP>Здравствуйте, _hum_, Вы писали:


__>>Здравствуйте, TimurSPB, Вы писали:


__>>>>вы немножко не на тот вопрос отвечаете. парсить все можно. вопрос в том, что для того, чтобы открыть файл, переносимый код должен роаботать с char* , для того, чтобы парсить строку — нужно иметь wstring_t. получается противоречие, которое надо как-то разрешать.

TSP>>>Тогда ничего не конвертить и работать с char*. В общем случае сделать программу, которая может получать не char* кросплатформенной нельзя.

__>>ну и как мне тогда парсить командную строку типа "--file=c:\in.txt"?

TSP>Например вот так:
  code
TSP>

TSP>#include <algorithm>

TSP>char* getCmdOption(char ** begin, char ** end, const std::string & option)
TSP>{
TSP>    char ** itr = std::find(begin, end, option);
TSP>    if (itr != end && ++itr != end)
TSP>    {
TSP>        return *itr;
TSP>    }
TSP>    return 0;
TSP>}

TSP>bool cmdOptionExists(char** begin, char** end, const std::string& option)
TSP>{
TSP>    return std::find(begin, end, option) != end;
TSP>}

TSP>int main(int argc, char * argv[])
TSP>{
TSP>    if(cmdOptionExists(argv, argv+argc, "-h"))
TSP>    {
TSP>        // Do stuff
TSP>    }

TSP>    char * filename = getCmdOption(argv, argv + argc, "-f");

TSP>    if (filename)
TSP>    {
TSP>        // Do interesting things
TSP>        // ...
TSP>    }

TSP>    return 0;
TSP>}
TSP>

TSP>http://stackoverflow.com/questions/865668/how-to-parse-command-line-arguments-in-c
TSP>Правда пример для "-f c:\in.txt". Можно просто не поддерживать нотацию "--file=c:\in.txt"

да, наверное, самый экономный по скорости вариант (без конвертаций)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.