013
08.08.2004, 22:16 Uhr
0xdeadbeef
Gott (Operator)
|
Wie gefällt euch der hier?
C++: |
#include <algorithm> #include <fstream> #include <iostream> #include <string> #include <vector>
#include "boost/spirit/core.hpp" #include "boost/tokenizer.hpp"
int main(int argc, char *argv[]) { /* Code zum Abfangen etwaiger Eingabefehler (Datei nicht vorhanden, zu wenig * Parameter etc) kann sich der geneigte Leser selbst schreiben. */
std::vector<std::string> lines; std::ifstream fin(argv[2]);
lines.push_back(""); // Indices nicht von 0-basiert auf 1-basiert transformieren while(fin) { std::string s; std::getline(std::cin, s); lines.push_back(s); }
boost::tokenizer<> tok(argv[1], boost::char_separator<char>(",")); for(tokenizer::iterator tok_iter = tok.begin(); tok_iter != tok.end(); ++tok) { int x1, x2; if(boost::spirit::parse(tok->c_str(), boost::spirit::int[assign_a(x1)]).full) if(x1 < 0) for(int i = 1; i <= x1; ++i) std::cout << lines[i] << std::endl; else std::cout << lines[x1] << std::endl; else if(boost::spirit::parse(tok->c_str(), boost::spirit::uint_p[assign_a(x1)] >> '-').full) for(int i = x1; i < lines.size(); ++i) std::cout << lines[i] << std::endl; else if(boost::spirit::parse(tok->c_str(), boost::spirit::uint_p[assign_a(x1)] >> '-' >> boost::spirit::uint_p[assign_a(x2)]).full) for(int i = x1; i <= x2; ++i) std::cout << lines[i] << std::endl; else { std::cerr << *tok << " nicht gültig." << std::endl; throw *tok; } }
return 0; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 08.08.2004 um 22:17 Uhr von 0xdeadbeef editiert. |