2008-02-21, 12:44
  #1
Medlem
hej. hur skulle man kunna plocka ut argument p smidigast stt?

tex om jag har ett program som jag ska skicka lite instllningar till:

-a -b -c -foo bar -d
eller
-a -b -foo=bar..

hur skulle koden kunna se ut? egentligen r det i perl jag ska gra det men tror jag fr mer svar hr. och jag vill nd bara se hur det skulle kunna g till..

tack
Citera
2008-02-21, 13:03
  #2
Medlem
getopt(3), finns i Perl ocks.
Citera
2008-02-21, 13:35
  #3
Medlem
C/C++

Notera att jag brjar loopa p 1 eftersom argv[0] r programmets namn. Om du har en flagga med ett vrde efter, s mste du kolla att det verkligen finns ett vrde efter (argc >= i + 1).

Kod:
	//Parse commandline args here
	for(int i = 1; i < argc; i++)
	{
		if(!strcmp(argv[i], "-help"))
		{
			std::cout << "\nFile-search 1.0 by Sasha^\n\n"
				<< "-ext\t\tExtension to append to the filenames. Default is none.\n"
				<< "-file\t\tFile with filenames. Default is urls.txt.\n"
				<< "-host\t\tHost to scan. Default is localhost.\n"
				<< "-threads\tThe number of threads to run. Default is 1.\n"
				<< "-timeout\tTimeout in ms between each attempt in a thread. Default is 10 ms.\n"
				<< "-v\t\tBe verbose. Default is not verbose.\n";
			return 0;
		}
		else if(!strcmp(argv[i], "-host") && argc >= i + 1)
			g_strHost = argv[i + 1];

		else if(!strcmp(argv[i], "-file") && argc >= i + 1)
			strFilename = argv[i + 1];

		else if(!strcmp(argv[i], "-ext") && argc >= i + 1)
			g_strFileext = argv[i + 1];

		else if(!strcmp(argv[i], "-timeout") && argc >= i + 1)
			g_iTimeout = atoi( argv[i + 1] );

		else if(!strcmp(argv[i], "-threads") && argc >= i + 1)
			iNumberOfConnections = atoi( argv[i + 1] );

		else if(!strcmp(argv[i], "-v"))
			g_bVerbose = true;
	}

.edit

Notera att ett vrde inte kan vara en flagga, te.x. : asd.exe -ext -ext. (Vilket gr detta till en dlig lsning.)
Slingan kommer ven kras fr varje vrde som finns, detta gr att lsa med extra if vid varje tilldelning som kr i++ om argc tillter det.
__________________
Senast redigerad av sasha^ 2008-02-21 kl. 13:47.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in