Łapka LogoŁapka Infa
📄
Algorytmy

Praca z Plikami (Odczyt i Zapis)

Każde zadanie na maturze wymaga wczytania danych z pliku .txt oraz zapisania wyniku do pliki wynik.txt. Naucz się najlepszych praktyk wejścia / wyjścia.

Obsługa Plików Tekstowych (.txt)

Rozwiązanie matury z informatyki zaczyna się od umiejętności otwarcia pliku dane.txt i zrzucenia go do pamięci. Kończy się natomiast zapisaniem rozwiązania do wynikiX.txt. Bez tej wiedzy nie zdobędziesz punktów za praktykę!

Poniżej znajdziesz uniwersalne skrypty do czytania i zapisywania plików w obu językach. W Pythonie korzystamy ze świetnego, automatycznie zamykającego menedżera kontekstu with open(), natomiast w C++ podpinamy się strumieniami ifstream i ofstream.


1. Wczytywanie Danych

Podstawą jest przeczytanie danych i usunięcie z nich znaków przejścia do nowej linii (\n). W Pythonie używamy funkcji strip(), a w C++ strumień >> automatycznie ignoruje białe znaki.

Python

# Menedżer 'with' gwarantuje, że plik automatycznie się zamknie
# Dodajemy parametr encoding='utf-8', by polskie znaki nie stanowiły problemu

tablica_danych = []

with open("dane.txt", "r", encoding="utf-8") as plik:
    for linia in plik:
        # strip() usuwa białe znaki z obu stron, w tym szkodliwe '\n'
        czysta_linia = linia.strip()
        
        # Jeśli plik zawiera liczby, konwertujemy napis na int()
        # liczba = int(czysta_linia)
        
        tablica_danych.append(czysta_linia)
        
print("Wczytano elementów:", len(tablica_danych))

C++

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

int main() {
    vector<string> tablicaDanych;
    string linia;
    
    // Tworzymy strumień wejściowy z pliku (input file stream)
    ifstream plik("dane.txt");
    
    // Zawsze sprawdzaj, czy plik istnieje i nie ma błędu!
    if (!plik.is_open()) {
        cout << "Blad! Nie mozna otworzyc pliku!" << endl;
        return 1;
    }
    
    // operator >> wczytuje do najbliższej spacji / nowej linii
    while (plik >> linia) {
        tablicaDanych.push_back(linia);
    }
    
    plik.close(); // Pamiętamy o zamknięciu
    
    cout << "Wczytano elementow: " << tablicaDanych.size() << endl;
    return 0;
}

2. Zapisywanie Wyników

Zapisywanie na maturze odbywa się często według wzorca: "Odpowiedzi do zadania 4.1 zapisz w pliku wyniki4.txt, podając każdą odpowiedź w oddzielnym wierszu".

Pamiętaj o dodaniu odpowiedniego zakończenia linii (w Pythonie \n, w C++ endl lub \n). Zapis do pliku nadpisze istniejący plik (jeśli go otworzymy w trybie "w" / nadpisywania, co jest domyślne dla C++ ofstream).

Python

wyniki = [100, 200, 300, 400]

# Tryb 'w' (write) stworzy nowy plik, lub NADPISZE stary
with open("wyniki4.txt", "w", encoding="utf-8") as plik:
    plik.write("Zadanie 4.1:\n")
    
    for w in wyniki:
        # plik.write() przyjmuje tylko stringi, dlatego rzutujemy przez str()
        plik.write(str(w) + "\n")

C++

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main() {
    vector<int> wyniki = {100, 200, 300, 400};
    
    // output file stream
    ofstream plik("wyniki4.txt");
    
    if (plik.is_open()) {
        plik << "Zadanie 4.1:\n";
        
        for (int w : wyniki) {
            // Wygodny zapis przypominający cout
            plik << w << "\n";
        }
        
        plik.close();
    }
    return 0;
}

[!TIP] Dla dociekliwych: Różnica między trybem dopisywania a nadpisywania Jeśli na maturze chcesz wypluwać odpowiedzi w osobnych funkcjach po kawałku do tego samego pliku wyniki4.txt, możesz otworzyć plik w trybie Dopisywania (Append). W Pythonie używasz argumentu "a" (append): open("wyniki4.txt", "a"). W C++ podajesz dodatkową flagę ios::app: ofstream plik("wyniki4.txt", ios::app);. Dzięki temu stare logi się nie usuną!