Wyrażenia regularne - REGEX jak przypisac kilka wyników do zmiennych

Wyrażenia regularne - REGEX jak przypisac kilka wyników do zmiennych
FR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 27
0

Korzystam z biblioteki REGEX która umożliwia wyszukiwanie wzorca - poprawnej daty z pliku tekstowego.

Otóz wszystko pięknie mi wyszukuje, wynik wypisuje na ekran, lecz teraz problem, jak przypisać te dwa osobne wyniki, które dostaje do dwóch innych zmiennych ? skoro w pętli for, dostajemy nowy "iter"? z jedną zmienną nie było by problemu...

EDIT: nawet z jedną zmienną byłby problem...
czy w tej bibliotece w ogóle moge przypisać *iter do stringa? jak to zrobić?

Kopiuj
	void wypisz_terminy()
	{
		fstream plik;
		string linia;
		string wynik; // do tej zmiennej chce miec pierwsza date
		string wynik2; // do tej drugą
		regex wzorzec("([0-9]{4}).([0-9]{2}).([0-9]{2})");
		plik.open("wejscie.txt", ios::in);
		if (plik.good() == false)
		{
			cout << "Plik nie istnieje!" << endl;
		}

		while (getline(plik, linia))
		{

			sregex_token_iterator iter(linia.begin(), linia.end(), wzorzec, 0);
			sregex_token_iterator end;

				for (; iter != end; ++iter) {
					std::cout << *iter << '\n'; // wypisuje na ekran wyniki

				}
			plik.close();
		};
};

a plik wejscie txt to:

Kopiuj
WO: Dookoła
2013.11.11
2013.11.21
Brno [Czechy], Wideń [Austria], Dubrownik [Chorwacja], Praga [Czechy]
2000PLN
Autokar

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

zamykasz plik po pierwszym wczytanym wierszu.

FR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 27
0

tak tak, już sobie z tym poradziłem, powaliły mi się nawiasy przy kopiowaniu.

rozwiązałem ten problem inną drogą - wszystko działa łącznie ze stringami:

Kopiuj
void wypisz_terminy()
	{
		fstream plik;
		string linia;
		smatch wynik; 
		string wynik1;// do tej zmiennej chce miec pierwsza date
		string wynik2; // do tej drugą
		int i = 0;
		regex wzorzec("([0-9]{4}).([0-9]{2}).([0-9]{2})");
		plik.open("wejscie.txt", ios::in);
		if (plik.good() == false)
		{
			cout << "Plik nie istnieje!" << endl;
		}


		while (getline(plik, linia))
		{

			if (regex_search(linia, wynik, wzorzec))
				i++;
			if (i == 1){
				wynik1 = wynik[0];
				cout << wynik1 << endl;
				i++;
			} 	
			if (i == 3){ 
				wynik2 = wynik[0]; 
				cout << wynik2 << endl;
				i++;
			}
		};
		plik.close();
	};
};


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.