Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
3 replies to this topic

#1 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 16 January 2011 - 10:40 PM

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?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 17 January 2011 - 03:22 PM

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).
  • 0

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 17 January 2011 - 10:14 PM

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,
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 January 2011 - 08:57 AM

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ổ!!!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.