Program szukający informacji w Pliku

0

Witam ^^

Mam do napisania program. Ma on za zadanie:

W Programie mam zmienną

int zadanie;

I Plik Tekstowy:

zadanie1=1
zadanie2=2
zadanie3=3
zadanie4=4

Program, ma za zadanie, jeżeli zmienna zadanie ma liczbę 4, to program ma w pliku przeszukać, w której linijce po znaku "=" jest liczba 4, a następnie wyświetlić to co jest przed znakiem "=", czyli w naszym przypadku "zadanie4".

Nie wiem jak się za to zabrać, ma ktoś jakiś pomysł?

Z góry THX za odpowiedź. :)

0

Wczytać dane z pliku do mapy

map<int,string>

która mapuje wartość po znaku = na string przed znakiem =.
Potem po prostu wybierasz sobie z mapy po kluczu.

0

Mógłbyś mi to jakoś przybliżyć? Jestem początkującym programistą.

0

Mapa to jest coś jak tablica asocjacyjna. Pozwala ci związać te sobą klucz z wartością. Ty chciałbyś związać liczbę z jakimś napisem i to właśnie proponuje zrobić.

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

int main()
{
  map<int,string> mapa;
  mapa.insert (pair<int,string>(1,"ala"));
  mapa.insert (pair<int,string>(7,"ma"));
  mapa.insert (pair<int,string>(15,"kota"));
  cout<<mapa[1]<<endl; //wypisze nam "ala"
  cout<<mapa[7]<<endl; //wypisze nam "ma"
  cout<<mapa[15]<<endl; //wypisze nam "kota"
  return 0;
}
0

Rozumiem, że zamiast liczby można wprowadzić też string?

A 2 pytanie, jak odczytać dane z pliku i dodać obsługę, żeby wczytywało przed i za znakiem "=" ?

0

Możesz mapować dowolny typ na dowolny typ.
Wczytujesz całą linię a potem dzielisz sobie za pomocą stringstream

0

Dobra, jest jedna kwestia, a ma ktoś pomysł jak zrobić jak będzie taka sytuacja, że mapa będzie taka:

mapa.insert (pair<string,string>("ala","podmiot"));
  mapa.insert (pair<string,string>("ma","czasownik"));
  mapa.insert (pair<string,string>("kota","rzeczownik"));
 

i mam tablice:

tablica[1] == "Ala";
tablica[2] == "Ma";
tablica[3] == "Kota";

I program pokazałby:

Ala - podmiot
Ma -czasownik
Kota - rzeczownik

Program musiałby sprawdzać, czy jakaś zmienna z tablicy jest w mapie, a następnie pokazać to co w niej się znajduje (rzeczownik etc.)
Ma ktoś jakiś pomysł?

1

Ale gdzie widzisz problem? Pomijam kwestie twojego niedouczenia jeśli chodzi o jezyk polski. Bo "podmiot" to zupełnie inna klasyfikacja niż "rzeczownik" i "czasownik". "Podmiot" pochodzi z rozkładu logicznego zdania, a "rzeczownik" czy "czasownik" to po prosty klasyfikacja słów ze względu na to jakimi są częściami mowy. Co ty właściwie chcesz uzyskać? Bo wygląda mi to na pisanie jakiegoś programu związanego z przetwarzaniem języka naturalnego, przez kogoś kto nie zna się ani na dziedzinie (w tym przypadku na języku polskim) ani na stronie technicznej (czyli programowaniu). Może warto się najpierw nauczyć przynajmniej jednego?

0

Napisałem to tylko przykładowo, a w ogóle, nigdy nie interesowałem się J. Polskim, lecz nie czuje się z tego powodu gorszy.
Co chce uzyskać?
Takowy program, do którego mogę wprowadzić słowo, tutaj przykładowo: Ala
Następnie program ma sprawdzić w bazie tekstowej

 
Ala=podmiot
ma=czasownik

czy jest takie słowo jak Ala (lecz ja nie znam tego z góry, program ma przeszukać).
Jeżeli jest takie słowo ma do zmiennej

 
string slowo;

zapisać to co jest po znaku "=", czyli słowo "podmiot".

Rozumiesz?

0

Mi się wydaje, że lepsze by było czytanie po kolei każdą linijkę pliku, a zarazem sprawdzanie czy dane hasło istnieje. Jeżeli tak to stopujesz pętle i pobierasz info po jej znaku równania '='.

0

Ciężej, jeżeli tych linijek jest 50000, wtedy jest to dość wolna metoda.

1

Hmm cholerka to troszke problem, bo nie wiadomo ile w każdej linijce jest liter, bo tak byś mógł skoczyć do danego "zbioru" fseek'iem. Jak mi coś wpadnie do głowy, to napiszę.

2

Ale ja nadal nie rozumiem jaki jest problem. Parsujesz plik i wprowadzasz wszystko do mapy. Potem sprawdzenie czy słowo jest w mapie odbywa się w czasie O(logn) (bo map<> w C++ jest oparte o drzewko czerwono-czarne). Przeglądanie za kazdym razem całego pliku w poszukiwaniu slowa jest bez sensu. No chyba ze plik wejściowy ma setki megabajtów/gigabajty to wtedy byłby problem z wprowadzeniem tego w całości do pamięci. Ale przykład który podałeś nie zajmie nawet 50mb wiec nie widzę problemu.

Potrafisz powiedzieć której rzeczy nie potrafisz zrobić? Przecież to jest wszystko proste jak budowa cepa. Nad czym wy tutaj tak dumacie?

0

Problem w tym jak sprawdzić czy dane słowo jest w Mapie.

2

Rozumiem ze masz bana na dokumentacje w takim razie?
http://www.cplusplus.com/reference/stl/map/
A dokładniej:
http://www.cplusplus.com/reference/stl/map/find/
Masz tam nawet przykład... Ludzkie lenistwo nie zna granic.

0

THX. Nie patrzałem nawet do dokumentacji,
Już sobie z tym poradziłem.
Temat CLOSE.

0

Koledze chodziło o wyszukanie konkretnego elementu, a nie sortowanie danych w map'ie. No ale jak temat close no to close ;p

0

Nie przeczytałem 2x wyżej post.

0

Witam. Ja mam nieco inny problem niż kolega, ale dołącze się w tym temacie bo została tu już udzielona ciekawa odpowiedź. Ta związana z mapą.

Ja mam problem innego rodzaju, chce zrobić szyfr digramowy. Działa on w ten sposób że dzieli słowo na 2 literowe bloki i szyfruje w pewien sposób gdzie parami te 2 znaki są od siebie zależne. W zasadzie mniejsza z tym bo takie szyfrowanie dla 2 znaków już w zasadzie przeprowadziłem. Gorzej dla całego słowa ale tu wpadłem właśnie na taki pomysł że może było by np tak że w pliku txt miał bym dla przykładu ułożone znaki tak: (parami nad sobą)

ab
cd
ef

I chciałbym znaki a, c i e wysłać do mojej zmiennej o nazwie znak1 z mojego programu a znaki b, d i f do zmiennej znak2. (znak1 i znak2 to zmienne dla których już szyfrowanie z powodzeniem przeprowadziłem) A że na ten moment po wprowadzeniu wartości w programie do obu zmiennych wypisuje mi naturalnie na konsoli parę odpowiedzi zaszyfrowanych no to chciałbym aby to czytało z pliku i właśnie zasilało zmienną znak1 i znak2 w sposób w jaki opisałem i np gdy będe miał tak jak w tym przykładzie trzy pary to i na konsoli naturalnie wyskoczą 3 wyniki.

Reasumując. Jak zrobić by tak ułożone znaki w pliku rozesłać do dwóch zmiennych w sposób jaki opisałem?

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