Nodejs đọc và ghi từng dòng tệp

Ví dụ

ứng dụng. js

const readline = require('readline');
const fs = require('fs');

var file = 'path.to.file';
var rl = readline.createInterface({
    input: fs.createReadStream(file),
    output: process.stdout,
    terminal: false
});

rl.on('line', function (line) {
    console.log(line) // print the content of the line on each linebreak
});

Cách sử dụng

ứng dụng nút

Việc thêm vào tệp rất tiện lợi khi bạn không muốn ghi đè lên tệp bằng nội dung mới mà muốn thêm vào tệp đó

ví dụ

Một phương pháp hữu ích để nối nội dung vào cuối tệp là

JScopy

4 (và đối tác của nó là

JScopy

5)

Trong Khoa học máy tính, tệp là tài nguyên được sử dụng để ghi dữ liệu một cách riêng biệt trong thiết bị lưu trữ của máy tính. Nút. js không ghi đè điều này theo bất kỳ cách nào và hoạt động với mọi thứ được coi là tệp trong hệ thống tệp của bạn

Đọc tệp và tài nguyên có nhiều cách sử dụng

  • Thống kê, phân tích và báo cáo
  • Học máy
  • Xử lý các tệp văn bản hoặc nhật ký lớn

Đôi khi, những tệp này có thể lớn một cách vô lý, với hàng gigabyte hoặc terabyte được lưu trữ và việc đọc toàn bộ chúng là không hiệu quả

Khả năng đọc từng dòng tệp cho chúng tôi khả năng chỉ tìm kiếm thông tin có liên quan và dừng tìm kiếm khi chúng tôi đã tìm thấy những gì chúng tôi đang tìm kiếm. Nó cũng cho phép chúng tôi chia dữ liệu thành các phần hợp lý, chẳng hạn như nếu tệp có định dạng CSV

Readline (từ v0. 12 trở lên)

Nút. js có mô-đun gốc để đọc các tệp cho phép chúng tôi đọc từng dòng. Nó đã được thêm vào năm 2015 và được dùng để đọc từ bất kỳ dòng

const fs = require('fs');
2 nào mỗi lần một dòng

Thực tế này làm cho nó trở thành một tùy chọn linh hoạt, không chỉ phù hợp với các tệp mà còn phù hợp với cả các đầu vào dòng lệnh như

const fs = require('fs');
3. Tài liệu về mô-đun
const fs = require('fs');
4 có thể được tìm thấy tại đây

const fs = require('fs');
4 là một mô-đun gốc. Bạn không cần phải sử dụng
const fs = require('fs');
6 cho bất kỳ trình quản lý gói nào khác để thêm nó, chỉ cần
const fs = require('fs');
7

const readline = require('readline');

và bạn tốt để đi

Vì phương thức

const fs = require('fs');
4 phải được cung cấp cùng với một luồng, trước tiên chúng tôi phải tạo nó bằng cách sử dụng một mô-đun gốc khác -
const fs = require('fs');
9

const fs = require('fs');

Bước tiếp theo là tạo đối tượng sẽ đọc từ luồng bằng hàm

JScopy

30

JScopy

3

Đảm bảo rằng bạn thay thế

JScopy

31 bằng đường dẫn thực tới một tệp trong hệ thống tệp của bạn

Khi quá trình chuẩn bị hoàn tất - việc đọc từng dòng tệp và in nội dung của nó ra bảng điều khiển có thể được thực hiện bằng cách

JScopy

6

Về cơ bản, ở đây chúng ta đang nói rằng bất cứ khi nào sự kiện

JScopy

32 xảy ra trong

JScopy

33, nó sẽ gọi hàm của chúng ta và truyền cho nó nội dung được đọc từ luồng. Trong trường hợp của chúng tôi, chúng tôi không muốn phức tạp hóa mọi thứ và chỉ cần in nó ra bàn điều khiển

đầu đọc dòng

Sau phần giải thích chi tiết về cách bạn có thể đọc từng dòng tệp bằng nút gốc. js, hãy xem phiên bản ngắn hơn của nó bằng cách sử dụng mô-đun trình đọc dòng nguồn mở từ npm

Vì đây là một mô-đun không phải bản địa, chúng tôi cần đảm bảo rằng chúng tôi đã khởi tạo dự án npm theo cách phù hợp với

JScopy

34 và sau đó cài đặt nó

JScopy

0

Điều này sẽ cài đặt phần phụ thuộc và thêm nó vào tệp

JScopy

35

Sau khi hoàn tất, việc đọc từng dòng một tệp chỉ tương tự như ví dụ trước mà không cần tạo

JScopy

33 ở giữa

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

JScopy

3

Một tính năng khá hữu ích ở đây là dừng đọc khi một số điều kiện trở thành sự thật. Điều này đạt được bằng cách trả lại

JScopy

37 từ chức năng gọi lại

Ví dụ: chúng tôi có thể đọc từng dòng một tệp cho đến khi chúng tôi tìm thấy một dòng có từ "STOP" trong đó

Có một cách tiếp cận hơi khác, sử dụng hai lệnh gọi lại lồng nhau và cú pháp có vẻ tự nhiên hơn đối với các nhà phát triển Java ngoài kia

JScopy

5

Ở đây, chúng tôi đang sử dụng chức năng

JScopy

38, chức năng này không cung cấp cho chúng tôi các dòng từ một tệp ngay lập tức, nhưng nó cung cấp cho chúng tôi một

JScopy

39. Nó có bộ chức năng riêng như

JScopy

60 và

JScopy

61 cho phép chúng tôi kiểm soát nhiều hơn một chút đối với quá trình đọc từng dòng tệp trong Node. js

N-readlines

Một cú pháp khác được cung cấp bởi mô-đun npm

JScopy

62

Hãy cài đặt nó

const fs = require('fs');
1

Và yêu cầu nó

const fs = require('fs');
2

Để có thể đọc từ một tệp, chúng ta nên tạo một đối tượng mới, cung cấp đường dẫn đến tệp của chúng tôi làm đối số

const fs = require('fs');
3

Việc lấy các dòng từ tệp được thực hiện bằng cách gọi hàm

JScopy

63

const fs = require('fs');
0

Một chức năng thú vị của mô-đun

JScopy

62 là

JScopy

65. Nó đặt lại con trỏ và bắt đầu quá trình đọc từ đầu tệp

Ghi chú. Nó chỉ hoạt động nếu không đạt được kết thúc

Lỗi thường gặp

Một lỗi phổ biến khi đọc từng dòng tệp trong Node. js đang đọc toàn bộ tệp vào bộ nhớ và sau đó chia nhỏ nội dung của nó bằng cách ngắt dòng

Đây là một ví dụ không chính xác có thể làm quá tải hệ thống của bạn nếu bạn cung cấp cho nó một tệp đủ lớn

const fs = require('fs');
1

Thoạt nhìn, có vẻ như đầu ra giống nhau đối với phương pháp này cũng như đối với các phương pháp trước đó và trên thực tế, nó hoạt động tốt đối với các tệp nhỏ. Nhưng hãy tiếp tục và thử làm việc với một công ty lớn. Đó chắc chắn không phải là thứ bạn muốn thấy trong hệ thống sản xuất của mình

Phần kết luận

Có nhiều cách để đọc từng dòng tệp trong Node. js và việc lựa chọn cách tiếp cận phù hợp hoàn toàn là quyết định của lập trình viên

Bạn nên nghĩ đến kích thước của các tệp bạn định xử lý, các yêu cầu về hiệu suất, kiểu mã và các mô-đun đã có trong dự án. Đảm bảo kiểm tra một số trường hợp góc như tệp lớn, trống hoặc không tồn tại và bạn sẽ thấy ổn với bất kỳ ví dụ nào được cung cấp