Wybór między wyrażeniami regularnymi

0

Witam, program ma wypisywać z danego dnia temperaturę i deszcz. Problem w tym, że czasem deszcz w pliku jest zapisany jako np. "rain":{"3h":0.07}, a czasem po prostu "rain":{}. Nie mam pomysłu jak to uwzględnić w programie, pomocy.:)

void using_regex(string filename)
{

	fstream plik;
	plik.open(filename,ios::in);
	if(plik.good()==false)
	{
		cout<<"Plik nie istnieje"<<endl;
		exit(0);
	}
	string linia;
	int licznik=0;
	int licznik_dzien=22;
	while(getline(plik, linia))
	{
		smatch mr;
		smatch abc;
		regex rx("\"temp\":\\d\\d\\d.\\d\\d");
		regex rain("\"rain\":{\"3h\":\\d.\\d\\d}");//TUTAJ SIE ZACZYNA PROBLEM
regex deszcz("\"rain\":{}");
		while( regex_search(linia, mr, rx))
		{
			regex_search(linia, abc, rain);
			for(int i=0;i<mr.size();++i)
				cout << "2015-12-"<<licznik_dzien<<" "<<licznik<<":00:00 " << mr[0]<<" and "<<abc[0]<< endl;
			licznik=licznik+3;
			if (licznik==24)
			{
				licznik=0;
				licznik_dzien++;
			}
			linia=mr.suffix();
		}
	}
	plik.close();
}

Początek pliku :):
:0.011,"cnt":40,"list":[{"dt":1450742400,"main":{"temp":281.67,"temp_min":280.681,"temp_max":281.67,"pressure":1023.42,"sea_level":1032.76,"grnd_level":1023.42,"humidity":93,"temp_kf":0.99},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":88},"wind":{"speed":9.21,"deg":242.005},"rain":{"3h":0.07},"sys":{"pod":"n"},"dt_txt":"2015-12-22 00:00:00"},{"dt":1450753200,"main":{"temp":282.28,"temp_min":281.34,"temp_max":282.28,"pressure":1022.48,"sea_level":1031.63,"grnd_level":1022.48,"humidity":93,"temp_kf":0.94},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":92},"wind":{"speed":11.22,"deg":252.002},"rain":{"3h":0.745},"sys":{"pod":"n"},"dt_txt":"2015-12-22 03:00:00"},{"dt":1450764000,"main":{"temp":283.5,"temp_min":282.616,"temp_max":283.5,"pressure":1024.23,"sea_level":1033.44,"grnd_level":1024.23,"humidity":92,"temp_kf":0.88},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":80},"wind":{"speed":9.06,"deg":271.5},"rain":{"3h":0.23},"sys":{"pod":"n"},"dt_txt":"2015-12-22 06:00:00"},{"dt":1450774800,"main":{"temp":283.44,"temp_min":282.614,"temp_max":283.44,"pressure":1026.11,"sea_level":1035.32,"grnd_level":1026.11,"humidity":91,"temp_kf":0.83},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":56},"wind":{"speed":7.16,"deg":267},"rain":{"3h":0.015},"sys":{"pod":"d"},"dt_txt":"2015-12-22 09:00:00"},{"dt":1450785600,"main":{"temp":284.48,"temp_min":283.712,"temp_max":284.48,"pressure":1025.76,"sea_level":1034.84,"grnd_level":1025.76,"humidity":93,"temp_kf":0.77},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":92},"wind":{"speed":7.02,"deg":249.001},"rain":{"3h":0.42},"sys":{"pod":"d"},"dt_txt":"2015-12-22 12:00:00"},{"dt":1450796400,"main":{"temp":283.

0
  1. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  2. Zapodaj właściwe znaczniki, nie [cpp] [/cpp] tylko <``code=cpp> <``/code>
  3. Podaj przykładowy plik w znacznikach: <``code> <``/code>
0

"\"rain\":{[\"3h\":\\d.\\d\\d]?}" takie coś?

0

Nie wiem jak uwzględnić dwie możliwe wersje regex.
Wskazówki od @_13th_Dragon zrobione :)

0

"\"rain\":\{[\"3h\":\\d.\\d\\d]?\}"
[exp]? mówi, że exp może wystąpić zero albo raz

Jeżeli się mylę to proszę niech ktoś mądrzejszy mnie poprawi bo nie jestem orłem w regexach

1

Takiego czegoś nie robi się za pomocą wyrażeń regularnych.
Człowieku ty ewidentnie masz tu JSON-a, więc weź parser JSON-a i zrób to jak należy.

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