Menu
CoddyTech

Girdi Okuma

Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 21 / 24.

Notları tek tek komutlarla eklemek, liste başka bir yerde zaten varsa yavaştır.

Bir program, stdin'den, bir pipe'ın veya klavyenin doldurduğu akıştan girdi okuyabilir. for await (const chunk of process.stdin), akış bitene kadar veriyi parça parça okur. Parçaları birleştirin, ardından satırlara ayırın.

// cat numbers.txt | node sum.js
let input = '';
for await (const chunk of process.stdin) {
    input += chunk;
}
const numbers = input.split('\n').filter((line) => line !== '').map(Number);
console.log(numbers.reduce((a, b) => a + b, 0));

Burada terminalin Girdi kutusu stdin'i doldurur. Metin genellikle satır sonu karakteriyle biter, bu nedenle son satır boştur: boş satırları kaldırın.

challenge icon

Görev

Kolay
  • node notes.js import girdisini okur, her satırı bir not olarak kaydeder ve Imported 3 notes. çıktısını verir.
  • Boş satırlar atlanır ve satırın başındaki ve sonundaki boşluklar temizlenir.

Input kutusuna üç satır yaz; satırlardan ikisinin arasında boş bir satır bırak ve node notes.js import komutunu çalıştır. Ardından kutu boşken çalıştır.

Kendin dene

// Not aracınız burada başlıyor.
import { rmSync } from 'node:fs';
import path from 'node:path';
import { formatNote } from './format.js';
import stats from './legacy/stats.cjs';
import store from './store.js';

const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

store.on('added', (note, n) => {
    console.log(`Saved note ${n}.`);
});

const noteNumber = (word) => {
    const n = Number(word);
    if (!Number.isInteger(n) || n < 1 || n > store.notes.length) {
        console.error(`No note ${word}`);
        process.exit(1);
    }
    return n;
};

if (command === 'add') {
    await store.add(text);
} else if (command === 'list') {
    const owner = process.env.NOTES_OWNER ?? 'you';
    console.log(`Notes for ${owner}`);
    if (store.notes.length === 0) {
        console.log('No notes yet');
    }
    const lines = store.notes.map((note, i) => formatNote(i + 1, note));
    if (store.settings.sort === 'newest') {
        lines.reverse();
    }
    lines.forEach((line) => console.log(line));
} else if (command === 'where') {
    const file = path.join(process.cwd(), 'notes.json');
    console.log(file);
    console.log(path.basename(file));
} else if (command === 'stats') {
    console.log(`${store.notes.length} notes, ${stats.countWords(store.notes)} words`);
} else if (command === 'done') {
    const removed = await store.remove(noteNumber(words[0]));
    console.log(`Done: ${removed}`);
} else if (command === 'remind') {
    const note = store.notes[noteNumber(words[0]) - 1];
    let count = 3;
    const timer = setInterval(() => {
        if (count > 0) {
            console.log(count);
            count -= 1;
        } else {
            console.log(note);
            clearInterval(timer);
        }
    }, 200);
} else if (command === 'clear') {
    rmSync('notes.json', { force: true });
    console.log('Deleted notes.json');
} else {
    if (command) {
        console.error(`Unknown command: ${command}`);
    }
    console.error('Usage: node notes.js <command> [words]');
    process.exit(1);
}

Node.js Temelleri bölümündeki tüm dersler