Przeszukiwanie pliku na podstawie podanego slowa

Przeszukiwanie pliku na podstawie podanego slowa
0

Witam! W internecie jest wiele podobnych tematów jednak żaden nie spełnia moich wymagań :). Otóż mam problem, ponieważ muszę napisać program, który prosi o podanie pewnych danych od użytkownika, a potem zapisuje te dane w pliku .txt wiersz po wierszu. Problem pojawia się jednak przy dodaniu funkcji do programu aby na podstawie podanego słowa wyszukał i wyświetlił wszystkie wiersze które zawierają dane słowo. Czyli, jest program, który zapisuje dane o osobach do pliku a następnie trzeba wyszukać wszystkie osoby o imieniu np. Kasia :). Jak to zrobić? Czytałem o wielu funkcjach ale nadal nie wiem jak tego użyć w sposób opisany powyżej. Z góry dzięki ;)

flowCRANE
Nie używaj prefiksów w tytułach wątków - od tego są tagi;
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Odczytujesz plik rekord po rekordzie, imię porównujesz z podanym imieniem, jeżeli takie samo to wyświetlasz cały wiersz.
Więcej nic nie da się powiedzieć dopóki nie pokażesz tego co już zrobiłeś.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0
Kopiuj
Pacjent pacjent;
fstream plik_szukaj;
plik_szukaj.open( "plik_szukaj.txt", ios::out | ios::app | ios::in);
cout << "Podaj plec pacjenta (K/M): ";
	cin >> pacjent.sex;
	plik_szukaj << pacjent.sex << "\t";
	
	cout << "Podaj imie pacjenta: ";
	cin >> pacjent.name;
	plik_szukaj << pacjent.name << "\t";
	
	cout << "Podaj nazwisko pacjenta: ";
	cin >> pacjent.surname;
	plik_szukaj << pacjent.surname << "\t";
	
	cout << "Podaj wiek pacjenta: ";
	cin >> pacjent.age;
	plik_szukaj << pacjent.age << "\t";
	
	cout << "Podaj chorobe pacjenta: ";
	cin >> pacjent.disease;
	plik_szukaj << pacjent.disease << endl;

Mam zrobioną klasę Pacjent. No i jak użytkownik poda te dane to one są dopisywane do pliku plik_szukaj.txt. A teraz chodzi mi o dodanie funkcji która działałaby w ten sposób:

  1. Program prosi o podanie frazy
  2. Podaje frazę
  3. Program wyświetla wszystkie wiersze zawierające tą frazę w pliku plik_szukaj.txt

Umiem zrobić żeby w konsoli wyświetliło całą zawartość pliku ale nie wiem jak zrobić właśnie to wyszukiwanie.

0
_13th_Dragon napisał(a):

Odczytujesz plik rekord po rekordzie, imię porównujesz z podanym imieniem, jeżeli takie samo to wyświetlasz cały wiersz.

No właśnie to wiem, ale nie wiem jak to zapisać w programie :P

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Miałeś podać to co zrobiłeś a nie tylko fragment kodu.
Zrób wczytanie rekordu do pliku.
może zadziałać tak: plik_czytaj>>pacjent.sex>>pacjent.name>>pacjent.surname>>pacjent.age>>pacjent.disease>>ws;
Ale nie koniecznie bo podałeś zbyt mało kodu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0
Kopiuj
/*Program symulujący bazę chorych
zapisujący wprowadzone dane do pliku*/


//Dołączenie potrzebnych bibliotek
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <conio.h>

//W programie wykorzystywana jest przestrzeń nazw 'std'. To polecenie oszczędzi nam ciągłego wpisywania 'std'
using namespace std;

/*Funkcja 'fstream' pozwala na stworzenie i operacje na plikach
Ponizej utworzony plik bedzie uzywany w calym programie dlatego utworzony jest na samym poczatku*/
fstream outputFile;

/*Plik 'plik_szukaj' zostal utworzony zeby ulatwic wyszukiwanie danych.
Dane ktore uzytkownik wpisze zostana wpisane rowniz tutaj. Gdzy uzytkownik
bedzie chcial wyszukac pacjenta program przeszuka ten plik*/
fstream plik_szukaj;

//Klasa 'Osoba' która okresla podstawowe dane czlowieka
class Osoba
{
	public:
		string sex;
		string name;
		string surname;
		int age;
};

/*Klasa 'Pacjent' charakteryzuje konkretnego pacjenta, ktory na cos choruje.
Dziedziczy ona po klasie 'Osoba' dane takie jak wiek czy plec oraz ma wlasną daną- chorobę (ang. disease)*/
class Pacjent : public Osoba
{
	public:
		string disease;
};

//Funkcja zapisujaca dane do pliku przyjmujaca parametr typu 'Pacjent'
int Write(Pacjent pacjent)
{
	//Pobieranie danych od uzytkownika o pacjentach oraz zapisanie do pliku 'outputFile' utworzonego na poczatku programu oraz do pliku 'plik_szukaj'
	//Jako ze pobierane dane to pojedyncze slowa mozna je wczytywac za pomoca polecenia 'cin'
	cout << "Podaj plec pacjenta (K/M): ";
	cin >> pacjent.sex;
	outputFile << pacjent.sex << "\t";
	plik_szukaj << pacjent.sex << "\t";
	
	cout << "Podaj imie pacjenta: ";
	cin >> pacjent.name;
	outputFile << pacjent.name << "\t";
	plik_szukaj << pacjent.name << "\t";
	
	cout << "Podaj nazwisko pacjenta: ";
	cin >> pacjent.surname;
	outputFile << pacjent.surname << "\t";
	plik_szukaj << pacjent.surname << "\t";
	
	cout << "Podaj wiek pacjenta: ";
	cin >> pacjent.age;
	outputFile << pacjent.age << "\t";
	plik_szukaj << pacjent.age << "\t";
	
	cout << "Podaj chorobe pacjenta: ";
	cin >> pacjent.disease;
	outputFile << pacjent.disease << endl;
	plik_szukaj << pacjent.disease << endl;
	
	//Zmienna tn dzieki ktorej uzytkownik moze zadecydowac czy chce wpisac wiecej pacjentow czy nie
	string tn;
	
	cout << "Chcesz wpisac wiecej pacjentow? (t/n): ";
	cin >> tn;
	
	//Jesli uzytkownik wpisze litere 't' program wyczysci ekran systemowym poleceniem 'cls' oraz jeszcze raz wykona funkcję Write()
	if(tn == "t")
	{
		system("cls");
		Write(pacjent);
	}
	//Jesli zas uzytkownik wpisze litere 'n' to program zakonczy dzialanie
	else if(tn == "n")
	{
		//Funkcja glowna ma typ 'int' dlatego musi zwracac jakas wartosc, np 0
		return 0;
	}
	//A jesli uzytkownik wpisze inny znak program go o tym powidomi i sie zamknie
	else
	{
		cout << "Wpisales zly znak: ";
		cin >> tn;
	}
}
 //Funkcja wyswietlajaca wszystkie wiersze pliku
void List()
{
	if( plik_szukaj.good() )
	{
		string napis;
		cout << "Wynik wyszukiwania:" << endl;
		while(!plik_szukaj.eof())
		{
			getline(plik_szukaj, napis);
	    	cout << napis << endl;
  	    }
  	    plik_szukaj.close();
	}
	else cout << "Nie udalo otworzyc sie pliku!" << endl;	
	
}

//Funkcja główna programu
int main()
{
	//Tworzenie pliku wyjsciowego, w ktorym beda zapisywane dane. Opcje po przecinku zezwalają na odczyt, zapis i dopisywanie danyc do pliku
	outputFile.open("baza_chorych.xls", ios::out | ios::app | ios::in);
	
	/*Do pliku ponizej zapisywane beda dane pacjentow, aby potem je mozna bylo wyszukac
	Bowiem z pliku Excelowego nie mozna odczytac danych poniewaz na ekran wyswietlane zostaja kody kratek itp, a z pliku txt czyta normalnie
	plik .xls jest natomiast czytelniejszy.*/
	plik_szukaj.open( "plik_szukaj.txt", ios::out | ios::app | ios::in);
	
	//Tworzenie 'interfejsu graficznego' tak zeby plik 'ladnei' wygladal
	outputFile << "=========================================" << endl;
	outputFile << " Plec\tImie\tNazwisko\tWiek\tChoroba" << endl;
	outputFile << "=========================================" << endl;
	
	//Deklaracja przykladowego obiektu klasy 'Pacjent'- JanKowalski
	Pacjent JanKowalski;
	
	//Deklaracja zmiennej pozwalajacej na wybor opcji
	int menu;
	
	//Tytuł oraz instrukcja dla użytkownika jak ma korzystać z programu
	cout << "\n\t\t\t\tBaza chorych\n\n" << endl;
	cout << "Witaj! Wybierz odpowiednia opcje i zacznij prace z programem. Zycze milej pracy.\n" << endl;
	cout << "[1] Dodaj pacjenta" << endl;
	cout << "[2] Wyszukaj pacjenta" << endl;
	cout << "Co chcesz robic?: ";
	cin >> menu;
	
	switch(menu)
	{
		case 1:
			Write(JanKowalski);
			break;
		case 2:
			List();
			break;
		default:
			cout << "Wpisales zly znak.";
			break;
	}
}

To jest cały kod programu. To dziedziczenie wiem, że nie jest potrzebne ale tak ma być bo nie piszę tego dla siebie. I teraz bym chciał żeby była jeszcze funkcja np.Read() która by wyszukiwała wszystkie wiersze na podstawie wpisanego słowa ;)

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0
  1. Wywal to wszystko
  2. Przeczytaj pierwszy lepszy kurs jaki znajdziesz w sieci
  3. Zacznij od początku

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JU
  • Rejestracja:około 22 lata
  • Ostatnio:28 dni
  • Postów:5042
0

I użyj do tego bazy danych. Chociażby SQLite.

JU
Jeśli to ma być prosta aplikacyjka na zaliczenie, to ok. Ale w innym wypadku no to same założenia proszą się o użycie SQLa.
n0name_l
Jednym z zalozen jest korzystanie z pliku *.txt :-|
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)