Как получить доступ к данным текстовых файлов в Javascript?

#javascript #text #command-line

#javascript #текст #командная строка

Вопрос:

Я пытаюсь создать список задач командной строки с помощью Javascript. Для этого у меня есть два текстовых файла todo.txt и done.txt . После добавления todo он должен быть сохранен в todo.txt и после вызова функции done с индексом она должна удалить соответствующее задание из todo.txt и сохраните это задание в done.txt . Я создал ниже программу, чтобы сделать то же самое. Но я получаю сообщение об ошибке: data.splice не является функцией, т.Е. объект: анонимный. Пожалуйста, скажите мне, какие изменения мне нужно внести в приведенный ниже код?

 var fs = require('fs');

//constants
var todo_file = "todo.txt";
var done_file = "done.txt";


function init(){
    if(!fs.existsSync(todo_file)){
        console.log("Creating `todo.txt` file");
        setTodo([]);    
    }
    if(!fs.existsSync(done_file)){
        console.log("Creating `done.txt` file");
        setDone([]);    
    }
}

function getTodo(){
    //read file contents
    var contents = fs.readFileSync(todo_file);
    return contents;
}

function getDone(){
    //read file contents
    var contents = fs.readFileSync(done_file);
    return contents;
}

function setDone(data){
    //write to  file
    fs.writeFileSync(done_file);
}
function setTodo(data){
    //write to  file
    fs.writeFileSync(todo_file);
}

//display usage
function usage() {
    console.log("Usage: done [add|check|delete|help] [task]");
    console.log("`task` is only a string when using `add` and a numbernfor all other commands.");
    console.log("Using the `done` without arguments lists all tasks");
}

//add task
function add(task) {
    //get data
    var data = getTodo();

    //add item
    data.push({task:task,completed:false});

    //set data
    setTodo(data);

    //list
    list();
}

//check task
function done(task) {
    //get data
    var data = getTodo();
    var done = getDone(); 
    //modify the data (toggle)
    done = data.splice(task,task 1);

    //set data
    setTodo(data);
    setDone(done);
    //list
    list();
}

//delete task
function del(task){
    //get data
    var data = getTodo();

    //delete item
    data.splice(task,task 1);

    //set data
    setTodo(data);

    //list
    list();
}

//list all tasks
function list() {
    
    //data
    var data = getTodo();
    
    if(data.length > 0){
        //print the list. using ANSI colors and formating
        console.log("x1b[93mx1b[4mTask list:x1b[24m");
        data.forEach(function (task,index){
            console.log(index 1 "."," [" (task.completed ? "x1b[92m✓x1b[93m" : " ") "] ",task.task);
        });
        
    }else{
        console.log("x1b[91mNo tasks added!!");
    }

}


var command = process.argv[2];
var argument = process.argv[3];

init();

switch(command){
    case "add":
        add(argument);
        break;
    case "done":
        done(argument-1);
        break;
    case "delete":
        del(argument-1);
        break;
    case "help":
        usage();
        break;
    case "list":
        list();
        break;
    default:
        console.log("x1b[91mCommand not found!!x1b[0m");
        usage();
        break;
} 
 

Комментарии:

1. Вы не можете хранить массивы Javascript непосредственно внутри файлов, вам потребуется сериализовать ваши данные. используйте JSON.stringify amp; JSON.parse для сериализации данных в и из вашей файловой системы. Ps. Существует множество способов сериализации ваших данных, JSON — самый простой.

Ответ №1:

Как напечатал Кит, вы не должны хранить массивы Javascript непосредственно внутри файлов, вместо этого вы должны сериализовать свои данные. JSON.stringify и JSON.parse — хороший вариант для сериализации данных, поскольку они являются самым простым методом.

Комментарии:

1. Я изменил свой код. Можете ли вы проверить это один раз и сказать мне, как мне написать функцию удаления, принимающую индекс в качестве параметра.