Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++ / Linux] Odbieranie argumentów jak programy linuksowe.

Ostatnio zmodyfikowano 2011-12-24 12:30
Autor Wiadomość
akwes
Temat założony przez niniejszego użytkownika
[C++ / Linux] Odbieranie argumentów jak programy linuksowe.
» 2011-12-23 21:44:47
Witam, jest takie pytanie.


$ ./program -h 30 -w 50 -name "trolejbus.mp3"

I teraz argumenty do programu dostane pewnie tak

/home/user/program
-h
30
-w
50
-name
"trolejbus.mp3"

Jest jakaś funkcja albo biblioteczka, która pozwoli na takie coś:
C/C++
GetValueOf( int argc, char ** argv, "-h" ); // i to mi zwróci 30
GetStringOf( int argc, char ** argv, "-name" ); // zwroci string trolejbus.mp3

Wiem że mogę to samemu łatwo napisać, ale może ktoś już gdzieś to napisał lepiej :)

P-46191
ison
» 2011-12-23 23:21:28
nie wiem czy do tego jest jakaś osobna biblioteka, napisanie tego to kilka linijek ;)
C/C++
#include <cstdio>
#include <string>
#include <cstring>

int GetValueOf( const int argc, const char * const * const argv, const char * const label )
{
    for( int i = 1; i < argc; ++i ) {
        if( !strcmp( argv[ i ], label ) ) {
            if( i + 1 < argc ) {
                int val = 0;
                if( !sscanf( argv[ i + 1 ], "%d", & val ) ) return 0; //brak parametru liczbowego
                else return val;
               
            }
            else return 0; //brak parametru
           
        }
    }
    return 0; //nie znaleziono
}

std::string GetStringOf( const int argc, const char * const * const argv, const char * const label )
{
    for( int i = 1; i < argc; ++i ) {
        if( !strcmp( argv[ i ], label ) ) {
            if( i + 1 < argc ) return argv[ i + 1 ];
            else return ""; //brak parametru
           
        }
    }
    return ""; //nie znaleziono
}

int main( int argc, char ** argv )
{
    printf( "%d\n", GetValueOf( argc, argv, "-a" ) );
    printf( "%s\n", GetStringOf( argc, argv, "-b" ).c_str() );
}
jakąś obsługę błędów czy coś można dorobić w zaznaczonych miejscach

tak na marginesie to na początku napisałem z obsługą "" ale potem zorientowałem się, że
"aaa bbb ccc"
 nie pójdzie jako 3 osobne parametry do argv tylko jako 1
aaa bbb ccc
, przynajmniej tak jest na Windowsie

(bez zbędnych spacji w kodzie :P - http://pastebin.com/DapGqSup)
P-46198
akwes
Temat założony przez niniejszego użytkownika
» 2011-12-24 12:30:26
Dzięki wielkie ;d
P-46207
« 1 »
  Strona 1 z 1