Pascal – zápis do souboru

Aktualizováno: 24. 4. 2020, datum vydání: 29. 11. 2012

Zde je příklad na otevření souboru a zápis do jiného souboru. Jedná se o naprostou jednoduchou kopii obsahu souboru.

Čtení ze souboru a zápis do souboru

Program předpokládá existenci souboru vstup.txt v adresáři C:\Users\Jitka\Desktop\pascal\. Pokud by soubor neexistoval, program je ukončen běhovou chybou.

Čtení a zápis probíhá po znacích

program ZapisDoSouboru;
uses
    crt;
var
    tVstup,tVystup: text;
    znak: char;
begin
    clrScr;

    assign(tVstup, 'C:\Users\Jitka\Desktop\pascal\vstup.txt');
    reset(tVstup);
    assign(tVystup, 'C:\Users\Jitka\Desktop\pascal\vystup.txt');
    rewrite(tVystup);
    while not eof(tVstup) do
    begin
        read(tVstup, znak);
//      write(znak); // kontrolni vypis znaku na obrazovku
        write(tVystup, znak);
    end;
    close(tVstup);
    close(tVystup);

    repeat
    until keyPressed;
end.

Čtení a zápis probíhá po řádkách

program ZapisDoSouboru;
uses
    crt;
var
    tVstup,tVystup: text;
    radka: string;
begin
    clrScr;

    assign(tVstup, 'C:\Users\Jitka\Desktop\pascal\vstup.txt');
    reset(tVstup);
    assign(tVystup, 'C:\Users\Jitka\Desktop\pascal\vystup.txt');
    rewrite(tVystup);
    while not eof(tVstup) do
    begin
        readln(tVstup, radka);
//      writeln(radka); // kontrolni vypis radky na obrazovku
        writeln(tVystup, radka);
    end;
    close(tVstup);
    close(tVystup);

    repeat
    until keyPressed;
end.

Ošetření existence vstupního souboru

Program nepředpokládá existenci souboru vstup.txt v adresáři C:\Users\Jitka\Desktop\pascal\. Pokud zdrojový soubor nenajde, vypíše chybovou hlášku. Kontrola probíhá ošetřením chyb pomocí výsledku ioResult a nastavením direktiv překladače.

Čtení a zápis probíhá po znacích

program ZapisDoSouboru;
uses
    crt;
var
    tVstup,tVystup: text;
    znak: char;
begin
    clrScr;

    assign(tVstup, 'C:\Users\Jitka\Desktop\pascal\vstup.txt');
    {$I-}
    reset(tVstup);
    {$I+}
    if ioResult <> 0 then
        writeln('Vstupni soubor se nepodarilo otevrit.')
    else
    begin
        assign(tVystup, 'C:\Users\Jitka\Desktop\pascal\vystup.txt');
        rewrite(tVystup);
        while not eof(tVstup) do
        begin
            read(tVstup, znak);
    //      write(znak); // kontrolni vypis znaku na obrazovku
            write(tVystup, znak);
        end;
        close(tVstup);
        close(tVystup);
    end;

    repeat
    until keyPressed;
end.

Čtení a zápis probíhá po řádkách

program ZapisDoSouboru;
uses
    crt;
var
    tVstup,tVystup: text;
    radka: string;
begin
    clrScr;

    assign(tVstup, 'C:\Users\Jitka\Desktop\pascal\vstup.txt');
    {$I-}
    reset(tVstup);
    {$I+}
    if ioResult <> 0 then
        writeln('Vstupni soubor se nepodarilo otevrit.')
    else
    begin
        assign(tVystup, 'C:\Users\Jitka\Desktop\pascal\vystup.txt');
        rewrite(tVystup);
        while not eof(tVstup) do
        begin
            readln(tVstup, radka);
//          writeln(radka); // kontrolni vypis znaku na obrazovku
            writeln(tVystup, radka);
        end;
        close(tVstup);
        close(tVystup);
    end;

    repeat
    until keyPressed;
end.

Soubor z aktuálního adresáře

V předchozích příkladech byla použita konkrétní cesta k souboru. Uživatel může mít cestu k souboru ve svém počítači jinou. Jedna z možností je vyzvat uživatele k zadání cesty k souboru, nebo cestu požadovat jako parametr při spuštění exe souboru. Další možnost je, že program bude hledat soubor v aktuálním adresáři, ze kterého je exe soubor pouštěn. Aktuální adresář lze zjistit pomocí procedury getDir.

Čtení a zápis probíhá po znacích

program ZapisDoSouboru;
uses
    crt;
var
    tVstup,tVystup: text;
    znak: char;
    adresar: string;
const
    vstup = 'vstup.txt';
    vystup = 'vystup.txt';
begin
    clrScr;

    getDir (0, adresar);
    assign(tVstup, adresar + '\' + vstup);
    {$I-}
    reset(tVstup);
    {$I+}
    if ioResult <> 0 then
        writeln('Vstupni soubor se nepodarilo otevrit.')
    else
    begin
        assign(tVystup, adresar + '\' + vystup);
        rewrite(tVystup);
        while not eof(tVstup) do
        begin
            read(tVstup, znak);
    //      write(znak); // kontrolni vypis znaku na obrazovku
            write(tVystup, znak);
        end;
        close(tVstup);
        close(tVystup);
    end;

    repeat
    until keyPressed;
end.

Více informací

Další články