Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Doan Van Ha

Rắc rối của file *.CSV

Các bài được khuyến nghị

Tôi xuất số liệu từ Acad ra file *.CSV, khi đó nó có dung lượng là n bytes.

Sau đó tôi mở và Save file này (không dám đụng chạm tới các cell của nó), thì nó có dung lượng là m bytes (m>n)?.

Làm sao để 2 file đó (trước save và sau save) có dung lượng như nhau?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi xuất số liệu từ Acad ra file *.CSV, khi đó nó có dung lượng là n bytes.

Sau đó tôi mở và Save file này (không dám đụng chạm tới các cell của nó), thì nó có dung lượng là m bytes (m>n)?.

Làm sao để 2 file đó (trước save và sau save) có dung lượng như nhau?

Dung lượng của file phụ thuộc vào phiên bản bạn sử dụng : Notepad, Notepad++, MS Excell, ...

 

Tuơng tự như khi bạn sử dụng các phiên bản CAD khác nhau (R13, R14, 2004,...) để save file CAD, bạn sẽ nhận đuợc các file có dung luơng khác nhau (mặc dù đều save về cùng 1 format, vd : AutoCad 2000 *.dwg).

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi xuất số liệu từ Acad ra file *.CSV, khi đó nó có dung lượng là n bytes.

Sau đó tôi mở và Save file này (không dám đụng chạm tới các cell của nó), thì nó có dung lượng là m bytes (m>n)?.

Làm sao để 2 file đó (trước save và sau save) có dung lượng như nhau?

Về file *.csv, ssg hiểu như sau:

CSV: Comma Separated Values file - file có các giá trị được ngăn cách bằng dấu phẩy.

Bản chất nó là Text File, chỉ bao gồm các ký tự ASCII.

Cách tính dung lượng:

- Ký tự thường: 1 byte

- Ký tự xuống dòng: 2 bytes

Ví dụ, trong file có các nội dung:

1,A

2,B

3,C(EOF - End Of File - kết thúc ở đây, không có ký tự xuống dòng)

File có 9 ký tự thường và 2 ký tự xuống dòng.

Kích thước file = 9x1 + 2x2 = 13 bytes

 

Có mấy trường hợp sau:

1- Nếu bạn open bằng Notepad hoặc Notepad++ rồi save lại (không làm gì cả), kích thước file không thay đổi trong mọi trường hợp

2- Nếu bạn open bằng Excel, sau khi save, trình Excel sẽ thêm ký tự xuống dòng ở cuối file -> kích thước file tăng thêm 2 bytes:

1,A

2,B

3,C

(EOF)

3- Nếu trong file bạn tạo (bằng Notepad hoặc bằng chương trình gì đó của bạn) có độ dài các record không giống nhau. Ví dụ:

1,A

2,B,B

3,C(EOF)

Theo cách tính trên, kích thước file là 15 bytes. Khi open và save bằng Excel, ngoài việc thêm ký tự xuống dòng ở cuối, Excel sẽ tự thêm vào các dấu phẩy để tạo thành file có độ dài record bằng nhau. Open lại file trên bằng Notepad, bạn sẽ thấy nó như vầy:

1,A,

2,B,B

3,C,

(EOF)

Hiểu theo cách của Excel, mỗi record trong file trên đều phải có đầy đủ 3 field, cụ thể như sau:

Record 1 có: 1 A nil

Record 2 có: 2 B B

Record 3 có: 3 C nil

Kết quả cuối cùng, kích thước file = 19 bytes

Bạn có thể tạo file đúng như ví dụ trên, dùng luân phiên Notepad và Excel open rồi save để kiểm chứng sẽ rõ hơn vấn đề.

Regard,

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Về file *.csv, ssg hiểu như sau:

CSV: Comma Separated Values file - file có các giá trị được ngăn cách bằng dấu phẩy.

Bản chất nó là Text File, chỉ bao gồm các ký tự ASCII.

Cách tính dung lượng:

- Ký tự thường: 1 byte

- Ký tự xuống dòng: 2 bytes

Ví dụ, trong file có các nội dung:

1,A

2,B

3,C(EOF - End Of File - kết thúc ở đây, không có ký tự xuống dòng)

File có 9 ký tự thường và 2 ký tự xuống dòng.

Kích thước file = 9x1 + 2x2 = 13 bytes

 

Có mấy trường hợp sau:

1- Nếu bạn open bằng Notepad hoặc Notepad++ rồi save lại (không làm gì cả), kích thước file không thay đổi trong mọi trường hợp

2- Nếu bạn open bằng Excel, sau khi save, trình Excel sẽ thêm ký tự xuống dòng ở cuối file -> kích thước file tăng thêm 2 bytes:

1,A

2,B

3,C

(EOF)

3- Nếu trong file bạn tạo (bằng Notepad hoặc bằng chương trình gì đó của bạn) có độ dài các record không giống nhau. Ví dụ:

1,A

2,B,B

3,C(EOF)

Theo cách tính trên, kích thước file là 15 bytes. Khi open và save bằng Excel, ngoài việc thêm ký tự xuống dòng ở cuối, Excel sẽ tự thêm vào các dấu phẩy để tạo thành file có độ dài record bằng nhau. Open lại file trên bằng Notepad, bạn sẽ thấy nó như vầy:

1,A,

2,B,B

3,C,

(EOF)

Hiểu theo cách của Excel, mỗi record trong file trên đều phải có đầy đủ 3 field, cụ thể như sau:

Record 1 có: 1 A nil

Record 2 có: 2 B B

Record 3 có: 3 C nil

Kết quả cuối cùng, kích thước file = 19 bytes

Bạn có thể tạo file đúng như ví dụ trên, dùng luân phiên Notepad và Excel open rồi save để kiểm chứng sẽ rõ hơn vấn đề.

Regard,

Cám ơn bạn SSG rất nhiều về những hiểu biết sâu sắc của bạn với "thằng" CSV. Và hình như có thêm một điều này nữa: ngoài việc thêm dấu "," khi mở file CSV bằng Excel để độ dài các record bằng nhau, nó lại có thêm một "rắc rối" nếu số liệu trong cell có đơn vị là độ-phút-giây. Chẳng hạn khi xuất từ Acad sang CSV một giá trị là 50d0'00" và sau đó mở bằng Excel rồi lưu thì cái cell này lại khác nhau, như thế này:

- Mở bằng Excel cả 2 file thì đều thấy giá trị giống nhau là 50d0'00"

- Mở bằng Notepad (file trước khi lưu) thì vẫn thấy là 50d0'0"

- Mở bằng Notepad (file sau khi lưu) thì thấy là "50d0'0""" (thêm 1 dấu " đằng trước và 2 dấu " đằng sau)

Thành ra, khi lấy ngược số liệu trở lại cho Acad nó lại khác nhau, mới mệt. Không biết nó còn "rắc rối" điều gì nữa không?

* Và thêm 1 điều này nữa: không phải dòng nào cũng thêm dấu "," để có số dấu "," trong các hàng như nhau, mà có hàng được thêm và cũng có hàng không được thêm, mới ... khổ!!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×