Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 2. diel - Práca s textovými súbormi (txt) v jazyku C

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Student C
Člen
Avatar
Odpovedá na DarkCoder
Student C:7.5.2018 13:33

dík. :-) O:-) :-) O:-)

Odpovedať
Cree que puedes manejarlo
Avatar
krepsy3
Tvůrce
Avatar
Odpovedá na Lukáš Hypša
krepsy3:14.9.2022 22:39

To je taková obskurnost, kvůli jejímuž pochopení je třeba podívat se trochu na historii ASCII.
Máme totiž v podstatě dva znaky, které značí konec řádky. Označují se jako CR a LF, v C (a dalších jazycích typu C++, C#, Java...) je zapíšeme jako '\r' a '\n'. Ještě doplním, že jejich číselný kód (tedy číslo, které dostaneme, když je přetypujeme na int) je pro CR 13 (0xD) a pro LF 10 (0xA).

Jak a k čemu byly tyto znaky původně vymyšleny? Jak je asi patrné, jedná se o netisknutelné znaky, a to odřádkování skutečně je - ten znak se v souboru nachází, ale my jej na obrazovce při přečtení souboru nevidíme, vidíme jen konec řádku. Takové znaky se označují jako řídicí. CR i LF jsou řídícím znakem, který má dnes význam pro ukončení řádku, ovšem jejich skutečná sémantika se liší, a vychází defacto z psacího stroje.

Původní terminály, kterými se před nástupem obrazovek s elektronickou klávesnicí připojovalo k mainframovému počítači, měly skutečně podobu psacího stroje, důležitá je část, která psala na papír - byla to hlava, které se po papíře pohybovala zleva doprava, a vždy napsala jeden znak. Když se došlo na konec řádku, hlava se vrátila zase doleva a válec, na němž byl papír namotán, se posunul o velikost výšky jednoho řádku.

CR znamená "Carriage Return", česky návrat vozíku. A je to příkaz pro zápisovou hlavu, aby se vrátila na začátek řádku. LF znamená line feed, česky odsunutí řádku, a je to příkaz pro papír, aby se pohnul o řádek dolů. Je tedy patrné, že oba znaky jsou velmi důležité pro to, aby správně fungoval textový výstup na psacostrojový terminál. Ale zároveň jsou situace, kdy se hodí použít jeden z nich bez druhého. Kupříkladu pokud chceme udělat několik prázdných řádek, stačí nám pouze několikrát LF (a jen jednou CR). Nebo když chceme napsat nějaký text tučně, napíšeme nejprve celou řádku normálně, pak uděláme jen CR a pak napíšeme mezeru na pozici, kde chceme normální text, a stejný znak podruhé na pozici, kde chceme tučný text.

Samozřejmě dnes už nemají postupy výše relevanci, vše je elektronické a odřádkováním se rozumí skok kurzoru o řádek níže a na nejlevější (či nejpravější, píšeme-li arabsky) pozici, jako jedna operace. ASCII nám ale zůstává, a tak si operační systémy mohly vybrat, jak budou odřádkování reprezentovat. Linux si zvolil LF, MAC OS si zvolil CR a Windows si zvolil CRLF. A tato rozhodnutí se kvůli zpětné kompatibilitě táhnou dodnes.

MAC OS od verze 10 nově používá LF, takže je 100% kompatibilní s Linuxem, ale mohly se rozbít soubory vytvořené programem v MAC OS 9 a starším. Co se Windows týče, mnoho aplikací je připraveno na konce řádků jen pomocí LF (všechny terminály, ať už cmd nebo Powershell a pochopitelně i windowsovský port bashe, a třeba také Wordpad, VS i VS Code, notepad++, PSPad...). Mnoho aplikací ale ne, jako třeba ten poznámkový blok (notepad) co je u tebe na printscreenu. Dost možná by tvůj soubor ve wordpadu vypadal správně.

Výpis v konzoli tedy bude vypadat správně, neboť terminálu stačí pro odřádkování LF a veškeré CR znaky prostě ignoruje. Pokud chceš, aby soubor vypadal správně i v Poznámkovém bloku, nahraď \n v fprintf příkazech za \r\n.

Odpovedať
Programátor je stroj k převodu kávy na kód.
Avatar
DarkCoder
Člen
Avatar
DarkCoder:16.9.2022 12:52

V článku je mnoho mylných a chybějících informací.

Zde jsou ty nejpodstatnější:

Pro práci se soubory je nutné vložit hlavičkový soubor stdio.h.
Funkce fputs() narozdíl od funkce puts() neprovádí odřádkování.
Funkce gets() je zastaralá a již se nepoužívá.
Funkce gets() nenahrazuje funkci scanf().
Funkce fgets() ne vždy přidává znak nového řádku do načteného řetězce.
Oprávnění není jediný důvod proč se nepodařilo otevřít soubor pomocí fopen().
Macro EOF může představovat jak chybu tak i indikaci, že se došlo na konec souboru.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 3 správy z 13.