CSV để phản đối JavaScript

Khi tôi đang học Node. Js Tôi luôn ngạc nhiên về mức độ dễ thực hiện của một số việc và mức độ khó thực hiện của những việc khác cũng như mức độ nghèo nàn của các ví dụ ngoài kia

Trường hợp cụ thể, tôi muốn đọc một số dữ liệu từ tệp CSV và sau đó gửi dữ liệu đó tới Elaticsearch để lập chỉ mục. Phần Elaticsearch mình đã tìm hiểu rồi, còn trong Node. js thật dễ dàng. Tôi cho rằng việc tìm một ví dụ về đọc tệp, tạo các đối tượng dựa trên các hàng, xử lý các đối tượng và thực hiện tất cả những điều đó trong các khối khoảng 1000 hàng là chuyện nhỏ. Loại công cụ này dễ dàng trong C# và có rất nhiều ví dụ. Không phải trường hợp là Node. js

Đây là hai cách để làm điều đó

Bạn có thể tải xuống tệp CSV có tất cả các vở kịch của Shakespeare, nhưng ví dụ bạn có thể tải xuống ở trên chỉ có 650 dòng đầu tiên từ tệp đó

Tôi muốn đọc tệp 100 hàng cùng một lúc, đặt các hàng vào các đối tượng rồi xử lý các hàng

phân tích cú pháp csv

Mô-đun đầu tiên tôi gặp là csv-parse

Chạy cái này từ bảng điều khiển -

npm install csv-parse

Tôi có một lớp Entry đại diện cho một hàng từ tệp CSV. Hàm tạo của nó có sáu tham số đại diện cho từng cột trong tệp CSV

Trong ví dụ này, việc xử lý dữ liệu theo khối là không cần thiết, nhưng khi tôi xử lý toàn bộ tệp với hơn 130.000 hàng, việc chia khối trở nên quan trọng

 1var fs = require['fs'];
 2var parse = require['csv-parse'];
 3
 4
 5function readCSV[] {
 6    let entries = [];
 7    let count = 0;
 8
 9    fs.createReadStream['shakespeare_plays_sample.csv']
10        .pipe[parse[{ delimiter: ';', from_line: 2 }]]
11        .on['data', function [row] {
12            count++;
13            entries.push[new Entry[row[0], row[1], row[2], row[3], row[4], row[5]]]
14
15            if [count % 100 == 0] {
16                processEntries[entries];
17                count = 0;
18                entries = []; // clear the array
19            }
20        }]
21        .on['end', function [] {
22            processEntries[entries];
23        }];
24}
25
26function processEntries[entries] {
27    console.log[entries[0].Id + "  to " + entries[entries.length - 1].Id];
28}
29
30class Entry {
31    constructor[id, play, characterLineNumber, actSceneLine, character, line] {
32        this.Id = id;
33        this.Play = play;
34        this.CharacterLineNumber = characterLineNumber;
35        this.ActSceneLine = actSceneLine;
36        this.Character = character;
37        this.Line = line;
38    }
39}
40
41readCSV[];

Lưu ý cách tôi phải đảm bảo rằng mâm cặp cuối cùng cũng được xử lý trên dòng 22

Cách tiếp cận này có vẻ ổn, nhưng sau đó tôi tìm thấy mô-đun csvtojson

csvtojson

Mô-đun này làm cho những gì tôi đang cố gắng thực hiện dễ dàng hơn một chút bằng cách bỏ qua nhu cầu xây dựng rõ ràng một đối tượng với dữ liệu từ các hàng trong tệp

Đầu tiên cài đặt mô-đun -

npm install csvtojson

Đây là mã -

 1const csv=require['csvtojson'];
 2
 3function readCSV[]{
 4    let entries = [];
 5    let count = 0;
 6
 7    csv[{delimiter:';'}]
 8    .fromFile['./shakespeare_plays_sample.csv']
 9    .then[[json]=>{
10        json.forEach[[row]=>
11        {   
12            count++;
13            entries.push[row];
14            if[count % 100 == 0]{
15                processEntries[entries];
16                count = 0;
17                entries = []; // clear the array
18            }
19        }];
20        processEntries[entries];
21    }]
22    return entries;
23}
24
25function processEntries[entries]{
26    console.log[entries[0].Id + "  to " + entries[entries.length - 1].Id];
27}
28
29readCSV[];

Một lần nữa lưu ý cách tôi xử lý các đoạn 100, và sau đó là đoạn cuối cùng trên dòng 20

Tất cả những điều này là nhằm mục đích lập chỉ mục tất cả các tác phẩm của Shakespeare trong Elaticsearch và tôi sẽ trình bày trong một bài đăng khác

Làm cách nào để chuyển đổi tệp CSV thành đối tượng trong JavaScript?

Cách tiếp cận. .
Đọc tệp csv bằng gói fs npm mặc định
Chuyển đổi dữ liệu thành Chuỗi và chia thành một mảng
Tạo một mảng tiêu đề
Đối với tất cả n-1 hàng còn lại, hãy làm như sau. Tạo một đối tượng trống để thêm các giá trị của hàng hiện tại vào nó. .
Chuyển đổi mảng kết quả thành json và tạo tệp đầu ra JSON

Làm cách nào để chuyển đổi CSV thành mảng đối tượng trong JavaScript?

Để chuyển đổi hoặc phân tích cú pháp dữ liệu CSV thành một mảng , bạn cần phải sử dụng lớp FileReader của JavaScript, lớp này chứa phương thức có tên readAsText[] sẽ đọc dữ liệu tệp CSV và phân tích cú pháp . Lớp FileReader là một API web, vì vậy giải pháp này chỉ hoạt động trong trình duyệt. . The FileReader class is a web API, so this solution only works in the browser.

Tôi có thể chuyển đổi CSV sang JSON không?

JSON yêu cầu dữ liệu phải ở dạng cấu trúc hoặc lược đồ, không tương thích với cấu trúc tệp CSV. Công cụ chuyển đổi CSV sang JSON được thiết kế để chuyển đổi các tệp CSV sang định dạng JSON một cách rất dễ dàng .

Làm cách nào để chuyển đổi tệp chuỗi CSV thành mảng đối tượng 2D bằng JavaScript?

JavaScript. Chuyển đổi chuỗi giá trị được phân tách bằng dấu phẩy thành mảng 2D .
Sử dụng mảng. nguyên mẫu. lát [] và Mảng. .
Sử dụng Chuỗi. nguyên mẫu. .
Bỏ qua đối số thứ hai, dấu phân cách, để sử dụng dấu phân cách mặc định là ,
Bỏ qua đối số thứ ba, omitFirstRow, để bao gồm hàng đầu tiên [hàng tiêu đề] của chuỗi CSV

Chủ Đề