wyciąganie fragmentów ze stringa

0

Mam taką formę stringa:czas=2017 11 24 1628$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$

i nie mam pojęcia jak mógłbym to w miare prosty sposób przefiltrować na poszczególne zmienne
tzn np
string czas=2017 11 24 1628
string OP=brak
int ID=1
itp.

0

O ile dane będą po kolei, to może być to coś takiego:

#include <iostream>
#include <string>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
	const size_t pos = s.find('$');
	const string result = s.substr(0, pos);
	s = s.substr(pos + 1);
	return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
	return atoi(get_var<string>(s).c_str());
}

int main() {
	string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$";
	const string czas = get_var<string>(s);
	const string OP = get_var<string>(s);
	const string ST = get_var<string>(s);
	const int ID = get_var<int>(s);
	const int ID_obl = get_var<int>(s);
	const int param1 = get_var<int>(s);
	const int param1_2 = get_var<int>(s);
	const int wynik = get_var<int>(s);
	const int rzad = get_var<int>(s);
	const int kolumna = get_var<int>(s);
	
	cout << "czas: " <<  czas << endl 
		 << "OP: " << OP << endl 
		 << "ST: " << ST << endl 
		 << "ID:" << ID << endl 
		 << "ID_obl: "<< ID_obl << endl
		 << "param1: " << param1 << endl
		 << "param1_2: " << param1_2 << endl
		 << "wynik: " << wynik << endl
		 << "rzad: " << rzad << endl
		 << "kolumna: " << kolumna << endl;
		 
	return 0;
}
0
mwl4 napisał(a):

O ile dane będą po kolei, to może być to coś takiego:

#include <iostream>
#include <string>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
	const size_t pos = s.find('$');
	const string result = s.substr(0, pos);
	s = s.substr(pos + 1);
	return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
	return atoi(get_var<string>(s).c_str());
}

int main() {
	string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0$param1=0$wynik=0$rzad=-1$kolumna=-1$";
	const string czas = get_var<string>(s);
	const string OP = get_var<string>(s);
	const string ST = get_var<string>(s);
	const int ID = get_var<int>(s);
	const int ID_obl = get_var<int>(s);
	const int param1 = get_var<int>(s);
	const int param1_2 = get_var<int>(s);
	const int wynik = get_var<int>(s);
	const int rzad = get_var<int>(s);
	const int kolumna = get_var<int>(s);
	
	cout << "czas: " <<  czas << endl 
		 << "OP: " << OP << endl 
		 << "ST: " << ST << endl 
		 << "ID:" << ID << endl 
		 << "ID_obl: "<< ID_obl << endl
		 << "param1: " << param1 << endl
		 << "param1_2: " << param1_2 << endl
		 << "wynik: " << wynik << endl
		 << "rzad: " << rzad << endl
		 << "kolumna: " << kolumna << endl;
		 
	return 0;
}

a jeśli chciałbym mieć ?
float param1=0
float param1=0
float wynik=0

1

Robisz kolejną specjalizację:

#include <iostream>
using namespace std;

template < typename T >
T get_var(string &s);

template <>
string get_var(string &s)
{
	const size_t pos = s.find('$');
	const string result = s.substr(0, pos);
	s = s.substr(pos + 1);
	return result.substr(result.find('=') + 1);
}

template <>
int get_var(string &s)
{
	return atoi(get_var<string>(s).c_str());
}

template <>
float get_var(string &s)
{
	return static_cast<float>(atof(get_var<string>(s).c_str()));
}

int main() {
	string s = "czas=2017 11 24 16:18:28$OP=brak$ST= $ID=1$ID_obl=33$param1=0.5$param1=0.1$wynik=100.2$rzad=-1$kolumna=-1$";
	string czas = get_var<string>(s);
	string OP = get_var<string>(s);
	string ST = get_var<string>(s);
	int ID = get_var<int>(s);
	int ID_obl = get_var<int>(s);
	float param1 = get_var<float>(s);
	float param1_2 = get_var<float>(s);
	float wynik = get_var<float>(s);
	int rzad = get_var<int>(s);
	int kolumna = get_var<int>(s);
	
	cout << "czas: " <<  czas << endl 
		 << "OP: " << OP << endl 
		 << "ST: " << ST << endl 
		 << "ID:" << ID << endl 
		 << "ID_obl: "<< ID_obl << endl
		 << "param1: " << param1 << endl
		 << "param1_2: " << param1_2 << endl
		 << "wynik: " << wynik << endl
		 << "rzad: " << rzad << endl
		 << "kolumna: " << kolumna << endl;
		 
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1