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

Wczytanie, wpisanie i zapisanie - Metody C++

VPS Starter Arubacloud
0 głosów
249 wizyt
pytanie zadane 21 października 2021 w C i C++ przez Vifuso Nowicjusz (170 p.)

Witam, przychodzę z kolejnym pytaniem. Czy da się zrobić aby tekst który już jest w pliku nie został "usunięcy" czy zamieniony ? Przykładowo w pliku jest pytanie: "Jak sie czujesz ?", odpowiadam: "a dobrze" i pytanie jest zastępowane odpowiedzią. Macie jakieś porady ? Ponieważ szukałem porad w internecie i nie znalazłem niczego co odpowiedziało by na moje pytanie.

Kod wygląda następująco. 

#include <iostream>
#include <ostream>
#include <fstream>
#include <string>
using namespace std;
 
class zadanie {
    public: 
        void odczyt() {
            fstream odczyt;
            odczyt.open("plik.txt");
             
            string linia;
            do {
                getline(odczyt, linia);
                cout<<linia<<endl;
            }
            while(linia != "");
             
            odczyt.close();
                         
        }
        void zmiany() {
            ofstream plik("plik.txt");
            string x;
            cin>>x;   
            plik<<x<<endl;
            plik.close();
        }
        void zapis() {
            cout<<"--------------"<<endl;
            cout<<"Po zapisie zmianie zostalo: "<<endl;
            cout<<"--------------"<<endl;
            fstream odczyt;
            odczyt.open("plik.txt");
              
            string linia;
            do {
                getline(odczyt, linia);
                cout<<linia<<endl;
            }
            while(linia != "");
              
            odczyt.close();
        }
};
int main(int argc, char** argv) {
    zadanie obiekt1;
    obiekt1.odczyt();
     
    zadanie obiekt2;
    obiekt2.zmiany();
     
    zadanie obiekt3;
    obiekt3.zapis();
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 21 października 2021 przez j23 Mędrzec (194,920 p.)

Przepisz plik dokonując podmiany/usunięcia odpowiedniej linii tekstu.


            do {
                getline(odczyt, linia);
                cout<<linia<<endl;
            }
            while(linia != "");

Zrób to po ludzku:

while(getline(odczyt, linia)) {
    cout << linia << '\n';
}

Jeśli używasz strumienia tylko do odczytu czy zapisu, używaj odpowiednio std::ifstream lub std::ofstream.

komentarz 22 października 2021 przez Vifuso Nowicjusz (170 p.)
Zrobiłem jak radziłeś, jednak po wpisaniu tego nie pojawia mi się nic. Więc nie wiem. A co mogę zrobić aby tekst nie był zastępowany ?
komentarz 22 października 2021 przez j23 Mędrzec (194,920 p.)
Pokaż kod.
komentarz 22 października 2021 przez Vifuso Nowicjusz (170 p.)

Źle sprawdziłem, już się wyświetla. Tylko dalej nie umiem zrobić, tego aby się to nie usuwało.

#include <iostream>
#include <ostream>
#include <fstream>
#include <string>
using namespace std;



class zadanie {
	public: 
		void odczyt() {
			//string z,z1,z2,z3,z4;
			//cin>>z;
			//cout<<"wybierz plik: "<<endl;
			fstream odczyt;
			odczyt.open("plik.txt");
			
			string linia;
			while(getline(odczyt, linia)) {
    			cout << linia << '\n';
			}
			odczyt.close();
						
		}
		void zmiany() {
			ofstream plik("plik.txt");
			string x,x1,x2,x3,x4; //pszystosawanie do tekstu zlozonego x kilku slow
			cin>>x>>x1>>x2;	
			plik<<x<<" "<<x1<<" "<<x2<<" "<<x3<<" "<<x4<<endl;
			plik.close();
		}
		void zapis() {
			cout<<"--------------"<<endl;
			cout<<"Po zapisie zmianie zostalo: "<<endl;
            cout<<"--------------"<<endl;
			fstream odczyt;
            odczyt.open("plik.txt");
             
            string linia;
            while(getline(odczyt, linia)) {
    			cout << linia << '\n';
			}
             
            odczyt.close();
        }
};
int main(int argc, char** argv) {
	zadanie obiekt1;
	obiekt1.odczyt();
	
	zadanie obiekt2;
	obiekt2.zmiany();
	
	zadanie obiekt3;
	obiekt3.zapis();
	return 0;
} 

 

komentarz 22 października 2021 przez j23 Mędrzec (194,920 p.)

Przecież napisałem, co powinieneś zrobić.

W pętli:

  1. czytasz linię z pliku A.
  2. sprawdzasz, czy linia powinna znaleźć się w pliku B. jeśli nie, skaczesz do 1 (continue).
  3. zapisujesz linię do pliku B (pamiętaj o dodaniu '\n' na końcu).
  4. skok do 1.

Prościej się nie da.

Podobne pytania

0 głosów
0 odpowiedzi 315 wizyt
0 głosów
1 odpowiedź 348 wizyt
0 głosów
1 odpowiedź 470 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 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!

...