Tôi đã gãi đầu về vấn đề này trong một thời gian. Về cơ bản, tôi cố gắng tạo ra một hệ thống phân cấp cây từ một tập hợp dữ liệu CSV. Dữ liệu CSV không nhất thiết phải được đặt hàng. Điều này giống như một cái gì đó như sau:Tạo cấu trúc cây từ csv
Header: Record1,Record2,Value1,Value2
Row: A,XX,22,33
Row: A,XX,777,888
Row: A,YY,33,11
Row: B,XX,12,0
Row: A,YY,13,23
Row: B,YY,44,98
Tôi đang cố gắng thực hiện cách nhóm được thực hiện linh hoạt nhất có thể. Cách đơn giản nhất cho các nhóm sẽ làm điều đó cho Record1 và Record2 với value1 và value2 được lưu trữ dưới Record2 để chúng ta có được kết quả như sau:
Record1
Record2
Value1 Value2
nào sẽ là:
A
XX
22,33
777,888
YY
33,11
13,23
B
XX
12,0
YY
44,98
Tôi đang lưu trữ cài đặt nhóm của tôi trong Danh sách hiện tại - tôi không biết liệu điều này có gây trở ngại cho suy nghĩ của tôi hay không. Danh sách này chứa một hệ thống cấp bậc của các nhóm ví dụ:
Record1 (SchemaGroup)
.column = Record1
.columns = null
.childGroups =
Record2 (SchemaGroup)
.column = Record1
.columns = Value1 (CSVColumnInformation), Value2 (CSVColumnInformation)
.childGroups = null
Mã cho điều này có vẻ như như sau:
private class SchemaGroup {
private SchemaGroupType type = SchemaGroupType.StaticText; // default to text
private String text;
private CSVColumnInformation column = null;
private List<SchemaGroup> childGroups = new ArrayList<SchemaGroup>();
private List<CSVColumnInformation> columns = new ArrayList<CSVColumnInformation>();
}
private enum SchemaGroupType {
/** Allow fixed text groups to be added */
StaticText,
/** Related to a column with common value */
ColumnGroup
}
Tôi stuggling sản xuất một thuật toán cho điều này, cố gắng nghĩ về cấu trúc cơ bản để sử dụng. Hiện tại tôi đang phân tích cú pháp từ trên xuống dưới, sử dụng lớp trình bao bọc của riêng tôi:
CSVParser csv = new CSVParser(content);
String[] line;
while((line = csv.readLine()) != null) {
...
}
Tôi chỉ đang cố bắt đầu bộ não mã hóa của mình.
Mọi suy nghĩ?
Ảnh lớn là gì? Trong trường hợp của hàng 'A, XX, 12,34' làm cách nào để bạn biết rằng 12 và 34 thuộc về A hoặc XX? – palacsint