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

Przeszukiwanie tekstu

0 głosów
1,043 wizyt
pytanie zadane 22 maja 2018 w C i C++ przez kamila131 Nowicjusz (140 p.)
Witam. Jestem laikiem co do programowania, więc proszę o wyrozumiałość. Przeszukałam internety w miarę możliwości i nie mogę znaleźć odpowiedzi na nurtujące mnie pytanie: Jak przeszukać plik txt przez konsolę? Moim zadaniem jest stworzenie programu w którym po wprowadzeniu tekstu przez użytkownika komputer przeszuka plik tekstowy, wyświetli to co użytkownik podał oraz 4 kolejne linijki.

3 odpowiedzi

0 głosów
odpowiedź 22 maja 2018 przez marcin99b Szeryf (86,330 p.)
Poszukaj jak wczytać zawartość pliku do zmiennej typu string

A później już operacje na tym stringu
Według mnie najprostszy sposób
0 głosów
odpowiedź 22 maja 2018 przez FaloY Bywalec (2,180 p.)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

string odpowiedz;
string odpowiedzText1;
string odpowiedzText2;
string odpowiedzText3;
string odpowiedzText4;

void odpowiedzCzytaj(string text1/*A*/,string napis/*B*/,string text2/*C*/,string napis2/*D*/,string text3/*E*/,string napis3/*F*/,string text4/*G*/,string napis4/*H*/)
{
	odpowiedzText1=text1;
	odpowiedzText2=text2;
	odpowiedzText3=text3;
	odpowiedzText4=text4;
		
	if(napis==":")
	{
		cout<<"dziala?"<<endl;
		//Tu sam sie z tym pobaw, nie dam ci wszystkiego na tacy ;D
	}
}

bool odpowiedzCzytaj(string nazwaPliku)
{
    ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
		return false;
    
    while( true ) //pętla nieskończona
    {
        string a;
        string b;
        string c;
        string d;
        string e;
        string f;
        string g;
        string h;

        plik>>a >>b>>c>>d>>e>>f>>g>>h;
        if( plik.good() )
             odpowiedzCzytaj(a,b,c,d,e,f,g,h);
        else
             break;
    }
    return true;
}


int main() 
{
	cout<<"We no daj tekst do wyszukania..."<<endl;
	cin>>odpowiedz;
	
	if(!odpowiedzCzytaj("odpowiedzi.txt"))
	{
		cout<<"Czy napewno jest stworzony ten dokument?"<<endl;
	}
}

plik powinien wygladac tak:

napis1 : napis2 : napis3 : napis4 : END

Nie ma za co ;) 

komentarz 23 maja 2018 przez j23 Mędrzec (195,220 p.)
Czy aby na pewno o to mu chodziło?
komentarz 23 maja 2018 przez mokrowski Mędrzec (158,960 p.)
Rzeczywiście "nie ma za co". Nagromadzenie złych technik...
komentarz 23 maja 2018 przez FaloY Bywalec (2,180 p.)
Mógłbyś powiedzieć jakie to złe techniki? XD

Może sam się czegoś nauczę, człowiek uczy się całe życie  ^^
komentarz 23 maja 2018 przez FaloY Bywalec (2,180 p.)
@j23

Podałem jej* jak może sobie zapisać te dane do stringa, teraz pozostało napisać jakiś system, który będzie sprawdzal itd...

Pozdro! ;)
komentarz 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)

@FaloY,

1. Użycie using namespace std;

2. Zmienne globalne (5-10 linia)

3. Duża ilość niezrozumiałych argumentów w odpowiedzCzytaj(...)

4. Wartość magiczna w 19. Co oznacza i do czego służy ":" ? Nie lepiej zdefiniować stałą separator?

5. Nie bardzo wiadomo "co robi to odpowiedzCzytaj"...

6. Nieuzasadnione przeciążenie takiej samej funkcji jak w 12 w 26

7. Brak RAII w 28-29

8. Nieprawidłowy test poprawności otwarcia pliku w 30 (podobnie 45)

9. Pętle nieskończone raczej zapisuj nie jako while a jako: for(;;) { .... }

10. Od 35-42, nie lepiej agregować w jakimś obiekcie i przesłać do metody? Po co tyle wolnych zmiennych?

Starczy... 

komentarz 24 maja 2018 przez j23 Mędrzec (195,220 p.)

9. Pętle nieskończone raczej zapisuj nie jako while a jako: for(;;) { .... }

Tu pętla nieskończona nie ma racji bytu, można przecież tak:

std::string a, b, c, d, e, f, g, h;

while( plik >> a >> b >> c >> d >> e >> f >> g >> h ) 
{
	odpowiedzCzytaj(a, b, c, d, e, f, g, h);
}

 

komentarz 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)

Oczywiście że można i nawet trzeba w tym algorytmie.

Precyzyjniej: jeśli zajdzie konieczność stosowania pętli nieskończonej, lepiej zrobić to tak: for(;;) { .... } 

komentarz 24 maja 2018 przez FaloY Bywalec (2,180 p.)

@mokrowski,

1. Ja bynajmniej nie widzę potrzeby aby definiować 

cout

itd... To nie jest na tyle zaawansowany program.

2. Dlaczego te zmienne globalne są aż tak złe?

3. Chodzi ci o to abym je popisywał?

4. Służy to do tego aby, wiedział gdzie ma zakończyć czytanie.

5. Otwiera plik, poczym czyta to co ma czytać.

6. Przeciążenie?

7. Tu masz rację.

8. Mógłbyś bardziej objaśnić?

9. Tu masz rację! :)

10. Ciekawa propozycja ;)

Pozdro!

komentarz 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)
Nie jestem nastawiony na polemikę. Robiłem to już wiele razy. Kończy się udowadnianiem że ktoś "nie jest wielbłądem". Wyraziłem swoje zdanie. Masz prawo się z nim nie zgodzić i robić jak chcesz. Niemniej jednak podając przykład, warto zachować dobre praktyki.

Zacznij od tego:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md

Jako przykład co do zmiennych globalnych:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-global

Jako przykład ilości argumentów:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-nargs

itd..
komentarz 25 maja 2018 przez FaloY Bywalec (2,180 p.)
Dziękuję!
–1 głos
odpowiedź 22 maja 2018 przez Perseusz Bywalec (2,180 p.)

No to C czy C++, bo dla takiego laika jak ja to jest różnica...

W każdym razie jak chodzi o C++ to musisz użyć biblioteki <fstream> Poradnik Pana Zelenta, kurs cpp0X

Nie możesz pracować na danych bezpośrednio z dysku, więc musisz je zapisać w pamięci np. w zmiennej std::string. Gdy już pobierzesz linijkę z pliku (getline(plik, zmiennaString);) możesz porównać tekst z tym wpisanym przez użytkownika, napisz jakąś funkcję, chociaż chyba standardowo jest jakaś funcka z szukaniem, więc możesz i jej użyć. Gdy program znajdzie szukaną frazę to poprostu wyświetlasz 4 dalsze linijki (albo przestajesz nie wyświetlać)

Jak potrzebujesz szczegółowego opisu to pisz, ale lepiej żebyś sama nad tym pomyślała cheeky

komentarz 23 maja 2018 przez niezalogowany
No przecież dobrze jest... Niech się człowiek minus wypowie.

Podobne pytania

0 głosów
2 odpowiedzi 1,365 wizyt
pytanie zadane 27 marca 2018 w C i C++ przez janusz1 Początkujący (330 p.)
0 głosów
0 odpowiedzi 631 wizyt
0 głosów
1 odpowiedź 615 wizyt
pytanie zadane 3 grudnia 2016 w PHP przez Rasty Początkujący (470 p.)

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,295 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...