Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Zapis do plików tekstowych

Zapis danych do plików tekstowych w C++ realizowany jest za pomocą strumieni wyjściowych, takich jak std::ofstream. Te mechanizmy umożliwiają bezpośredni zapis różnorodnych danych, włączając tekst i liczby, do pliku. Wykorzystanie strumieni wyjściowych zapewnia kontrolę nad procesem zapisu, pozwalając na dokładne umieszczanie danych w pliku zgodnie z zadaną strukturą i formatem.

 

Wykorzystanie operatora << w zapisie do plików w C++

Operator << jest podstawowym narzędziem służącym do przekazywania danych do strumienia wyjściowego w C++. Umożliwia on prosty i bezpośredni zapis tekstów, liczb oraz innych typów danych do pliku. Dla przykładu, poniższy kod ilustruje zapis tekstu i liczby do pliku tekstowego:

std::ofstream plik("wyjscie.txt");
plik << "Przykładowy tekst" << std::endl;
plik << 123 << std::endl;

W tym fragmencie kodu, tworzymy plik "wyjscie.txt" i zapisujemy w nim tekst oraz liczbę, każdy element na osobnej linii.

 

Zawartość pliku wyjscie.txt po wykonaniu kodu:

Przykładowy tekst
123

 

 

Sekwencyjny zapis linii tekstu

W sytuacjach, gdy potrzebujemy zapisywać dane linia po linii, na przykład przy tworzeniu plików z wieloma wpisami lub logów, używamy pętli do sekwencyjnego zapisywania elementów:

std::ofstream plik("log.txt");
for (int i = 0; i < 10; i++) {
    plik << "Log numer: " << i << std::endl;
}

W tym przykładzie, tworzymy plik "log.txt" i zapisujemy w nim dziesięć linii tekstu, każda z numerem logu.

 

Zawartość pliku log.txt po wykonaniu kodu:

Log numer: 0
Log numer: 1
Log numer: 2
Log numer: 3
Log numer: 4
Log numer: 5
Log numer: 6
Log numer: 7
Log numer: 8
Log numer: 9

 

 

Zaawansowane formatowanie tekstu przy zapisie

Dla zaawansowanego formatowania tekstu, jak w przypadku plików CSV, stosujemy bibliotekę <iomanip>. Pozwala ona na precyzyjne ustawienie szerokości pola, wyrównania i innych aspektów formatowania tekstu. Przykład:

std::ofstream plik("dane.csv");
plik << std::left << std::setw(10) << "Nazwa" << std::setw(10) << "Cena" << std::endl;
plik << std::left << std::setw(10) << "Produkt1" << std::setw(10) << 49.99 << std::endl;

W tym fragmencie kodu, szerokość każdej kolumny ustawiona jest na 10 znaków, co zapewnia spójny i czytelny zapis dwóch linii danych.

 

Zawartość pliku dane.csv po wykonaniu kodu:

Nazwa     Cena      
Produkt1  49.99   

 

 

Zapis binarny w C++

Zapis binarny jest stosowany, gdy wymagana jest optymalizacja wydajności lub zapis specyficznych struktur danych. Poniższy przykład demonstruje zapis liczby całkowitej jako ciąg bajtów:

std::ofstream plik("plik.bin", std::ios::binary);
int dane = 12345;
plik.write(reinterpret_cast<char*>(&dane), sizeof(dane));

W tym przypadku, otwieramy plik w trybie binarnym i zapisujemy liczbę 12345 w formie ciągu bajtów.

 

 

Przykłady zapisu do pliku

 

Zapis listy zakupów

W tym przykładzie zapisujemy listę zakupów do pliku tekstowego, korzystając z tablicy i pętli for.

#include <fstream>
#include <iostream>

int main() {
    const int liczbaProduktow = 3;
    std::string zakupy[liczbaProduktow] = {"Mleko", "Chleb", "Jabłka"};
    std::ofstream plik("lista_zakupow.txt");
    for (int i = 0; i < liczbaProduktow; i++) {
        plik << zakupy[i] << std::endl;
    }
    return 0;
}

Efekt: Po uruchomieniu, program zapisze każdy produkt z listy zakupów w nowej linii w pliku lista_zakupow.txt.

 

 

Zapis tekstu wprowadzonego przez użytkownika

W tym przykładzie zapisujemy tekst wprowadzony przez użytkownika do pliku tekstowego.

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string daneUzytkownika;
    std::cout << "Wpisz tekst do zapisania: ";
    std::getline(std::cin, daneUzytkownika);
    std::ofstream plik("uzytkownik.txt");
    plik << daneUzytkownika;
    plik.close();
    return 0;
}

Efekt: Użytkownik wprowadza tekst, który jest zapisywany do pliku uzytkownik.txt.

 

 

Weryfikacja zapisanych danych

Przykład demonstruje weryfikację danych zapisanych w pliku tekstowym.

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string oczekiwaneDane = "Testowy tekst";
    std::ofstream plik("test.txt");
    plik << oczekiwaneDane;
    plik.close();

    std::ifstream plikOdczyt("test.txt");
    std::string wczytaneDane;
    std::getline(plikOdczyt, wczytaneDane);

    if (wczytaneDane == oczekiwaneDane) {
        std::cout << "Dane zostały poprawnie zapisane." << std::endl;
    } else {
        std::cout << "Błąd w zapisie danych." << std::endl;
    }
    return 0;
}

Efekt: Program sprawdza, czy dane zapisane w pliku test.txt są zgodne z oczekiwanymi danymi.

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się