• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Algorytm odczytujący odpowiednie linijki z pliku na podstawie zadanej ścieżki kluczy

VPS Starter Arubacloud
0 głosów
95 wizyt
pytanie zadane 12 stycznia 2020 w C i C++ przez CamaroTheBOSS Nowicjusz (120 p.)
edycja 12 stycznia 2020 przez Patrycjerz

Hej! Mam do zrobienia program, który na podstawie zadanej ścieżki kluczy np.(menu popup menuitem) wypisze na ekran linijki pliku, które się pod tym kluczem znajdują. Plik wygląda mniej więcej tak:

{
"menu": 
{
     "id": "file",
     "value": "File",
     "popup": 
     {
          "menuitem": 
          [
               {"value": "New", "onclick": "CreateNewDoc()"},
               {"value": "Open", "onclick": "OpenDoc()"},
               {"value": "Close", "onclick": "CloseDoc()"}
          ]
     }
}
}

A więc dla ścieżki z nawiasów program powinien wypisać na ekran:

{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}

Dodatkowo, plik może być o wiele dłuższy, klucze mogą mieć zupełnie inne, dowolne nazwy i mogą się one powtarzać pod różnymi elementami, przykładowo value należy do menu jak i do menuitem. Z tego względu stworzyłem system, który zadaną ścieżkę kluczy dzieli na słowa i wrzuca do tablicy stringów. Teraz ten system chciałbym wykorzystać właśnie do wyszukiwania tych kluczy oraz tego co się pod nimi znajduję w pliku, jednakże nie mam pojęcia jak się za to zabrać. Myślałem nad zliczaniem nawiasów klamrowych w pętli, żeby wiedzieć kiedy np. nawias przy menu się otwiera, a kiedy zamyka, tak żeby mieć zakres, z którym zakresem pliku pracować w następnym obiegu pętli przy okazji kolejnego klucza, ale nie jestem pewny, czy będzie to działać przy większych plikach. Kod źródłowy tego co dotychczas udało mi się stworzyć:

int main()
{
	string nazwapliku;
	string sciezka;
	const char * spacja = " ";
	string tab[100];
	
	
	fstream plik_json;
	cout << "Podaj nazwe pliku: ";
	getline(cin, nazwapliku); //wczytywanie nazwy z klawiatury (calej linii wlacznie ze spacjami)
	plik_json.open(nazwapliku, ios::in); //otwieranie do odczytu
	if (!plik_json.good()) //sprawdzanie czy plik istnieje
	{
		cout << "Nie udalo sie otworzyc pliku";
		return 1;
	}

	cout << "Podaj sciezke do klucza: ";
	getline(cin, sciezka); //wczytywanie sciezki z klawiatury (calej linii wlacznie ze spacjami)
	size_t pozycja[100];
	pozycja[0] = 0;
	int ilosc_pozycji = 0;
	for (int i = 1; i < 10; i++) //zapisywanie do tablicy pozycji spacji w stringu z kluczami
	{
		
		
		pozycja[i] = sciezka.find(spacja, pozycja[i-1]+1, 1);
		ilosc_pozycji++;
		if (sciezka.find(spacja, pozycja[i - 1] + 1, 1) == string::npos)
		{
			break;
		}
	}

	for (int i = 1; i < ilosc_pozycji; i++) //wypisanie pozycji spacji
	{
		cout << pozycja[i] << endl;
	}

	tab[0] = sciezka.substr(0, pozycja[1]); //wpisanie kluczy do tablicy kluczy
	for (int i = 1; i < ilosc_pozycji; i++)
	{
		tab[i] = sciezka.substr(pozycja[i]+1, pozycja[i + 1] - pozycja[i]);
	}


	for (int i = 0; i < ilosc_pozycji; i++)  //wypisanie kluczy na ekran
	{
		cout << tab[i] << endl;
	}

	for (int i = 0; i < ilosc_pozycji; i++) //sedno programu (wyszukiwanie z pliku za pomoca kluczy)
	{

	}
	
	
	
	plik_json.close();
	return 0;
}

 

komentarz 12 stycznia 2020 przez j23 Mędrzec (194,920 p.)
Chcesz zrobić parser JSON-a (?) w jednej funkcji? Karkołomne.
komentarz 12 stycznia 2020 przez CamaroTheBOSS Nowicjusz (120 p.)
Nie mam pojęcia jak to zrobić xD Myslałem, że jedna pętla wystarczy
komentarz 12 stycznia 2020 przez tkz Nałogowiec (42,000 p.)

https://github.com/nlohmann/json użyj tego, jeden nagłówek, sporo ułatwi. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 429 wizyt
0 głosów
1 odpowiedź 252 wizyt
pytanie zadane 13 listopada 2022 w C i C++ przez piotr_domanski Bywalec (2,040 p.)
0 głosów
0 odpowiedzi 477 wizyt
pytanie zadane 13 stycznia 2022 w C i C++ przez Nikso Nowicjusz (230 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...