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

Przeszukiwanie tekstu

Object Storage Arubacloud
0 głosów
455 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 (82,080 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 (194,920 p.)
Czy aby na pewno o to mu chodziło?
komentarz 23 maja 2018 przez mokrowski Mędrzec (155,460 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 (155,460 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 (194,920 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 (155,460 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 (155,460 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,190 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 969 wizyt
pytanie zadane 27 marca 2018 w C i C++ przez janusz1 Początkujący (330 p.)
0 głosów
0 odpowiedzi 310 wizyt
0 głosów
1 odpowiedź 345 wizyt
pytanie zadane 3 grudnia 2016 w PHP przez Rasty Początkujący (470 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...