Čtení souborů a zápis do souborů

Dokončeno

Aplikace Tailwind Traders potřebuje číst prodejní data jednotlivých obchodů a pak vypočítat celkový součet a pak zapsat celkový součet všech souborů prodeje jednotlivých obchodů do nového souboru.

Čtení dat ze souborů pomocí souboru fs.readFile

Ke čtení souborů slouží metoda readFile v modulu fs.

await fs.readFile("stores/201/sales.json");

Návratovým objektem metody readFile je objekt Buffer. Obsahuje obsah souboru v binárním formátu. Předpokládejme například, že máte soubor s názvem sales.json s následujícím obsahem.

{
  "total": 22385.32
}

Protokolováním návratové hodnoty metody readFile byste získali hodnotu Buffer.

<Buffer 7b 0a 20 20 22 74 6f 74 61 6c 22 3a 20 32 32 33 38 35 2e 33 32 0a 7d>

Tento výsledek není příliš užitečný. Soubor jste sice přečetli, ale tato data rozhodně nejsou „čitelná“. To je ale v pořádku. JavaScript může převést Buffer hodnotu na řetězcovou hodnotu, kterou můžete použít k výpočtu součtu. Za tímto účelem stačí vyvolat objekt String a předat vyrovnávací paměť.

const bufferData = await fs.readFile("stores/201/sales.json");
console.log(String(bufferData));

Výstup je:

{
  "total": 22385.32
}

Analýza dat pomocí JSON.parse

Tato data v řetězcovém formátu vám toho moc nepřinášejí. Jsou to jen znaky, ale teď ve formátu, který dokážete přečíst. Chcete, aby byl tento řetězec možné převést na data přístupná prostřednictvím kódu programu (označovaná jako analýza dat).

JavaScript obsahuje integrovaný parser souborů JSON. Abyste ho mohli používat, nemusíte nic zahrnovat. Stačí použít objekt JSON. Jako bonus dokonce nemusíte před parsováním převádět hodnotu Buffer na řetězec. Metoda JSON.parse to dokáže. JSON.parse je běžná metoda, kterou často používáte při vývoji webu, když rozhraní API přijímá data (jako řetězce) přes internet, což je pak potřeba převést na objekty JSON.

// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");

// turn string into JSON
const data = JSON.parse(fileContents);

// access the value by the property key `total`
console.log(data.total);

Výstup je:

22385.32

Tip

Soubory mají nejrůznější formáty. Vzhledem k integrované podpoře v tomto jazyku je nejvhodnější pracovat se soubory JSON. Můžete ale narazit na soubory .csv, s pevnou šířkou nebo v jiném formátu. V takovém případě je nejlepší vyhledat na webu npmjs.org parser pro soubory tohoto typu.

Zápis dat do souborů pomocí souboru fs.writeFile

V předchozím cvičení jste se naučili, jak zapisovat soubory. Byl to ale jen prázdný soubor. Pokud chcete do souboru zapsat data, použijete stejnou metodu writeFile, ale jako třetí parametr předáte data, která se mají zapsat.

// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");

// turn string into JSON
const data = JSON.parse(fileContents);

// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");

// write the total to the "totals.json" file
await fs.writeFile(filePath, data.total);

totals.txt Obsah souboru je:

22385.32

Připojení dat k souborům pomocí souboru fs.writeFile

V předchozím příkladu se soubor přepíše pokaždé, když do něho něco zapíšete. Někdy chcete k souboru připojit data místo toho, abyste je úplně nahradili. Data můžete připojit předáním příznaku metodě writeFile . Ve výchozím nastavení je příznak nastaven na w, což znamená nahradit soubor. Místo toho se k souboru připojíte tak, že předáte a příznak, což znamená připojení.

// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");

// turn string into JSON
const data = JSON.parse(fileContents);

// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");

// write the total to the "totals.json" file
await fs.writeFile(filePath, `${data.total}\r\n`, {flag: "a"});

totals.txt Obsah souboru je:

22385.32

Tip

Zápis \r\n v předchozím příkladu kódu dává JavaScriptu pokyn, aby hodnotu vložil na vlastní řádek. Pokud byste tuto hodnotu (označovanou jako návrat na začátek řádku a odřádkování) nepředali, byla by všechna čísla natěsnaná na jednom řádku.

V dalším cvičení dokončíte projekt pro Tailwind Traders tím, že přečtete všechny soubory tržeb a zapíšete celkový součet do souboru txt, který lze zpracovat v obchodním systému firmy.