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ę |