Download AutoCad Bản Quyền

Lisp thống kê text: lệnh TKT đếm dòng chữ trùng lặp

Lisp thống kê text dùng lệnh TKT: mở gói tải kiểm tận nơi, in mật khẩu autocad123, nói rõ công thức đặt bảng và bốn loại chữ mà lệnh không đếm.

  • autocad123.vn
  • 16/08/2023

Lisp thống kê text là công cụ đếm xem mỗi dòng chữ trong bản vẽ lặp lại bao nhiêu lần, rồi vẽ luôn kết quả thành bảng ngay cạnh chỗ bạn bấm chuột. Bài này in mật khẩu giải nén, nói rõ gói tải chứa gì, cách nạp cho AutoCAD 2026 và bốn thứ mà lệnh không đếm.

Tóm tắt. Gói tải đúng chủ đề bài, bên trong có đúng một tệp B13_Thong ke text_tkt.lsp, 1.107 byte, ngày 3 tháng 4 năm 2020. Mật khẩu giải nén là autocad123. Lệnh gọi là TKT. Nó chỉ đếm đối tượng TEXT một dòng nên bỏ qua MTEXT, thuộc tính khối và chữ của kích thước. Bảng kết quả xếp theo số đếm tăng dần, và rất hay vỡ phông chữ Việt vì lệnh lấy kiểu chữ hiện hành chứ không lấy kiểu chữ của text nguồn.

Gói tải ở bài lisp thống kê text này chứa gì

Gói tải gồm đúng những thứ sau. Dung lượng ghi đúng theo số byte của tệp.

Hạng mụcGiá trị
Tệp trên Google Drive73.715 byte, khoảng 72 KB, định dạng RAR 5
Kho nén tải vềRAR 5, kèm một ảnh JPG 88.958 byte không cần dùng tới
Mật khẩu giải nénautocad123
Sau khi giải nénĐúng 1 tệp, B13_Thong ke text_tkt.lsp, 1.107 byte
Ngày tệp lisp3 tháng 4 năm 2020, lúc 11 giờ 37
Số dòng mã26 dòng, thuần ký tự ASCII
Tên lệnh khai báo(defun c:tkt …), tức gõ TKT

Ảnh JPG kèm trong gói là tờ hướng dẫn bảo bạn mở trình duyệt điện thoại, tra một từ khoá bán hàng trên Google, vào một trang thương mại rồi kéo xuống chân trang lấy mật khẩu. Bỏ qua tờ đó. Đường đi ấy đã hỏng từ lâu, và mật khẩu đã in ngay dưới đây.

Tải về

Lisp đếm dòng text trùng nhau, lệnh TKT

Một tệp .lsp duy nhất, 26 dòng mã, chạy bằng ActiveX. Đếm số lần lặp của từng dòng TEXT rồi vẽ bảng kết quả tại điểm bạn chỉ.

  • Định dạng LSP, đóng trong RAR
  • Dung lượng tải 73.715 byte
  • Số tệp sau giải nén 1
  • Lệnh TKT
Tải tệp lisp

Mật khẩu giải nén: autocad123

Nạp tệp lisp vào AutoCAD 2026

Giải nén hết ba lớp, bạn được một tệp .lsp. Chép nó vào một thư mục cố định, ví dụ D:\CAD\lisp. Đừng để trong thư mục Downloads, vì mỗi lần dọn máy là mất. Thư mục này dùng chung cho các lisp khác trong bài tổng hợp lisp cad.

Sau đó làm ba việc trong AutoCAD 2026. Gõ OPTIONS, sang thẻ Files, thêm thư mục vừa tạo vào cả Support File Search Path lẫn Trusted Locations. Gõ APPLOAD, trỏ tới tệp và bấm Load, các bước kể kỹ ở bài cách load lisp trong cad. Cuối cùng mở Startup Suite trong chính hộp thoại đó rồi thêm tệp vào, để bản vẽ nào mở lên cũng có sẵn lệnh.

Nếu bỏ qua bước Trusted Locations, AutoCAD sẽ chặn lại bằng hộp thoại cảnh báo dưới đây. Bấm Load Once là chạy được ngay lần này, nhưng lần sau nó lại hỏi.

Hop thoai Security Unsigned Executable File tren AutoCAD 2026

Hình 1. Hộp thoại Security - Unsigned Executable File trên AutoCAD 2026. Ảnh chụp khi nạp một tệp lisp khác, nhưng hộp thoại hiện y hệt với mọi tệp .lsp chưa ký số và nằm ngoài thư mục tin cậy. Ba nút lần lượt là nạp luôn từ nay, nạp một lần, và không nạp.

Ba bước dùng lệnh TKT

Ví dụ dưới đây lấy lại đúng bản vẽ trong bài gốc năm 2020: một khối ghi chú vật liệu gồm 11 dòng chữ, trong đó nhiều dòng lặp lại.

Muoi mot dong text ghi chu vat lieu trong ban ve CAD

Hình 2. Khối ghi chú gốc, 11 dòng TEXT. Dòng "chiều dày lớp bảo vệ 15 đối với sàn" xuất hiện 4 lần, dòng "25 đối với dầm, cột" xuất hiện 3 lần, bốn dòng còn lại mỗi dòng một lần.

Bước 1.TKT rồi Enter. Dòng nhắc hiện ra là Chon Text de Liet ke hay ENTER de chon tat ca. Quét chọn phần chữ bạn muốn đếm, hoặc bấm Enter luôn để lấy toàn bộ text trên tab đang mở.

Con tro chuyen sang o vuong chon doi tuong sau khi go lenh TKT

Hình 3. Con trỏ đổi thành ô vuông chọn đối tượng. Lệnh đã cài sẵn bộ lọc nên bạn quét trùm cả bản vẽ cũng chỉ dính chữ, không dính đường nét.

Bước 2. Chọn xong thì Enter. Dòng nhắc chuyển sang Diem dat Bang, chờ bạn chỉ một điểm.

Dong nhac Diem dat Bang cho nhap toa do

Hình 4. Dòng nhắc chỗ đặt bảng. Bấm chuột vào chỗ trống, hoặc gõ thẳng cặp toạ độ.

Bước 3. Bấm điểm. Bảng hiện ra ngay, gồm hai cột chữ rời: cột trái là số lần lặp, cột phải là nội dung dòng.

Bảng kết quả được đặt theo công thức nào

Đây là chỗ hay gây bực nhất, vì nhiều người bấm điểm xong không thấy bảng đâu, hoặc thấy một bảng bé như hạt gạo. Toàn bộ kích thước bảng do hai biến hệ thống quyết định, không có hộp thoại nào để chỉnh.

Bảng TKT vẽ ra và khoảng cách các dòng Số đếm Nội dung dòng 1 BÊTÔNG M200 1 THÉP D>10 3 LỚP BẢO VỆ 25 4 LỚP BẢO VỆ 15 1,5×txtsiz 5×txtsiz txtsiz = DIMTXT × DIMSCALE Đặt DIMSCALE = 0 thì txtsiz = 0, lệnh hỏng

Hình 5. Chiều cao chữ của bảng bằng DIMTXT nhân DIMSCALE. Cột nội dung nằm cách cột số đếm đúng 5 lần chiều cao đó, mỗi dòng cách nhau 1,5 lần. Điểm bạn bấm chính là gốc của chữ đầu tiên ở cột số đếm.

Ba hệ quả rút ra từ công thức này. Bản vẽ đang để DIMSCALE bằng 100 và DIMTXT bằng 2,5 thì chữ trong bảng cao 250 đơn vị, tức là rất to, phải thu nhỏ màn hình mới thấy. Bản vẽ để DIMSCALE bằng 1 thì bảng bé xíu lẫn vào nét vẽ. Còn bản vẽ đặt DIMSCALE bằng 0, kiểu ghi kích thước theo tỷ lệ khung nhìn, thì chiều cao tính ra bằng 0 và lệnh không tạo được chữ. Gõ DIMSCALE kiểm trước khi chạy là xong.

Thứ tự dòng cũng cố định. Mã sắp xếp bằng phép so sánh (< (cdr x) (cdr y)), tức tăng dần theo số đếm, nên dòng lặp nhiều nhất nằm dưới cùng chứ không phải trên cùng. Muốn ngược lại thì đổi dấu < thành > trong dòng vl-sort.

Vì sao bảng kết quả hay vỡ chữ tiếng Việt

Bài gốc chụp cả kết quả nhưng không nói gì về chuyện này, còn người dùng thì gặp suốt. Đây là ảnh kết quả thật của chính bản vẽ ví dụ.

Bang ket qua sau khi chay TKT bi vo phong chu tieng Viet

Hình 6. Bảng kết quả. Số đếm đúng tuyệt đối, tổng 6 dòng cộng lại vừa đủ 11. Nhưng chữ Việt vỡ hết: "chiều dày lớp bảo vệ" hiện thành "chÒu dÇy líp b?o vÖ".

Nguyên nhân nằm ở chỗ mã gọi hàm vla-addtext mà không chỉ định kiểu chữ. Đối tượng mới sinh ra vì thế mang kiểu chữ hiện hành của bản vẽ, thường là Standard với phông txt.shx. Trong khi đó text nguồn dùng một phông Việt hoá kiểu VNI hoặc TCVN3, nơi các ký tự có dấu được cất ở vùng mã cao. Chuỗi ký tự chép sang nguyên vẹn, chỉ có bảng chữ để vẽ ra là khác, nên hiện thành ký tự lạ.

Cách chữa mất mười giây. Trước khi gõ TKT, bấm vào một dòng text nguồn, xem ô Style trong bảng Properties để biết tên kiểu chữ của nó. Đặt kiểu đó thành kiểu hiện hành bằng ô Text Style trên ribbon Annotate. Rồi mới chạy lệnh. Bảng sẽ ra đúng chữ. Bảng đã lỡ vẽ sai thì chọn hết rồi đổi Style trong Properties, không cần chạy lại.

Bốn thứ lisp thống kê text không đếm

Đây là giới hạn quan trọng nhất và cũng dễ hiểu lầm nhất. Cả hai lệnh chọn trong mã đều mang bộ lọc (cons 0 "TEXT"). Mã 0 trong DXF là tên loại đối tượng, và chuỗi "TEXT" chỉ khớp đúng loại text một dòng.

Bộ lọc của TKT: chỉ mã DXF 0 là TEXT Có đếm TEXT một dòng tạo bằng lệnh TEXT hoặc lệnh DTEXT Mọi lớp, mọi kiểu chữ Bỏ qua MTEXT nhiều dòng Thuộc tính khối Chữ nằm trong block Chữ của DIM, LEADER Muốn đếm cả MTEXT thì sửa bộ lọc ở cả hai chỗ ssget, đổi "TEXT" thành "TEXT,MTEXT"

Hình 7. Bên trái là thứ lệnh nhìn thấy, bên phải là thứ nó không nhìn thấy. Bốn nhóm bị bỏ qua đều là chữ, nhưng trong AutoCAD chúng thuộc loại đối tượng khác.

Nhóm thứ nhất là MTEXT, chữ nhiều dòng gõ bằng lệnh MTEXT. Nhóm thứ hai là thuộc tính khối, tức phần chữ điền vào khung tên hay ký hiệu cao độ. Nhóm thứ ba là mọi chữ nằm bên trong định nghĩa block. Nhóm thứ tư là chữ do lệnh ghi kích thước hoặc ghi chú dẫn sinh ra. Muốn sửa số của Dim thì dùng lisp làm tròn số của Dim. Bản vẽ hiện đại dùng MTEXT nhiều hơn TEXT, nên chạy lệnh mà bảng ra ngắn hơn dự đoán thì gần như chắc chắn vì lý do này.

Còn một chi tiết nhỏ nhưng hay làm sai kết quả. Mã dùng hàm assoc để gom các dòng giống nhau, mà phép so sánh chuỗi trong AutoLISP phân biệt chữ hoa chữ thường. Hai dòng "Thép D10" và "THÉP D10" bị tính là hai mục riêng. Một dấu cách thừa ở cuối dòng cũng vậy.

Sửa mã để đếm được cả MTEXT

Mở tệp bằng Notepad, tìm hai chỗ có chuỗi (cons 0 "TEXT"), đổi cả hai thành (cons 0 "TEXT,MTEXT"). Bộ lọc của ssget chấp nhận nhiều tên loại đối tượng ngăn nhau bằng dấu phẩy, nên chỉ cần sửa đúng chuỗi đó. Lưu lại và nạp lại bằng APPLOAD.

Sau khi sửa thì nhớ điều này. Nội dung MTEXT có thể chứa mã định dạng như \P xuống dòng hay {\fArial|b1;…} đổi phông. Hàm vla-get-TextString trả về cả phần mã đó, nên hai đoạn nhìn giống hệt nhau trên màn hình vẫn có thể bị đếm thành hai mục khác nhau. Muốn gom đúng thì phải lọc mã định dạng trước khi so sánh, và đó là việc lớn hơn nhiều so với sửa một chuỗi.

Một điểm nữa của mã đáng biết trước khi sửa. Bảng luôn được vẽ vào không gian mô hình, vì mã lấy sẵn vla-get-modelspace. Nhưng nhánh chọn tất cả lại lọc theo tab hiện hành qua biến CTAB. Nghĩa là đứng ở tab Layout gõ lệnh thì text được đếm là text của layout đó, còn bảng kết quả lại rơi vào tab Model. Bấm điểm xong không thấy gì thì sang tab Model tìm.

Không cài lisp thì đếm bằng gì

AutoCAD có sẵn hai đường, và chúng hữu ích khi bạn ngồi máy người khác hoặc khi không được phép nạp tệp ngoài.

Dùng QSELECT với bảng Properties

QSELECT, chọn Object type là Text, chọn Properties là Contents, đặt toán tử và gõ chuỗi cần tìm. Bấm OK, AutoCAD chọn hết các dòng khớp. Bảng Properties ở tiêu đề sẽ hiện tên loại đối tượng kèm số lượng đang chọn. Cách này đếm từng chuỗi một, hợp khi bạn chỉ cần kiểm một vài giá trị.

Dùng trình Data Extraction

DATAEXTRACTION trên AutoCAD bản đầy đủ. Trình hướng dẫn cho chọn loại đối tượng Text, chọn thuộc tính Contents, và có sẵn cột Count gộp các dòng trùng nhau. Kết quả xuất được ra bảng nhúng thẳng vào bản vẽ hoặc ra tệp bảng tính. Chậm hơn gõ ba chữ TKT, nhưng kết quả là bảng thật có khung, và cập nhật lại được.

Đừng nhầm với TCOUNT. Nhiều bài trên mạng liệt kê TCOUNT vào nhóm công cụ thống kê chữ. Không phải. TCOUNT là lệnh của Express Tools dùng để đánh số thứ tự tự động cho các dòng chữ đã chọn, nó ghi thêm số vào text chứ không đếm số lần lặp. Bài cũ ở địa chỉ này từng có một danh sách mười cái tên kiểu đó, phần lớn không tồn tại, nên đã bị gỡ bỏ.

Lỗi thường gặp

Hiện tượngVì saoCách xử
Gõ TKT báo Unknown commandTệp chưa nạp, hoặc đã nạp nhưng vừa mở sang bản vẽ khácNạp lại bằng APPLOAD rồi thêm vào Startup Suite
Bảng ra chữ vuông và dấu hỏiChữ mới lấy kiểu chữ hiện hành, không lấy kiểu của text nguồnĐặt kiểu chữ hiện hành trùng với kiểu của text nguồn trước khi chạy
Bảng to khổng lồ hoặc bé li tiChiều cao chữ bằng DIMTXT nhân DIMSCALESửa hai biến đó rồi chạy lại lệnh
Bấm điểm xong không thấy bảngDIMSCALE đang bằng 0 nên chiều cao tính ra bằng 0Đặt DIMSCALE về một số dương đúng tỷ lệ bản vẽ
Chạy ở tab Layout mà bảng biến mấtMã luôn ghi kết quả vào không gian mô hìnhSang tab Model tìm, hoặc chạy lệnh ngay trong Model
Bảng thiếu nhiều dòng so với bản vẽNhững dòng đó là MTEXT hoặc thuộc tính khốiĐổi bộ lọc thành TEXT,MTEXT, hoặc dùng Data Extraction
Hai dòng nhìn giống nhau bị tách đôiKhác nhau ở chữ hoa chữ thường hoặc dấu cách thừaDọn text nguồn cho thống nhất rồi đếm lại

Câu hỏi thường gặp

Lisp thống kê text có chạy trên AutoCAD LT không?

Từ AutoCAD LT 2024 trở đi thì có, với điều kiện dùng bản Windows. LT 2024 đã có AutoLISP, và các hàm ActiveX nội bộ mà tệp này gọi đều nằm trong nhóm được hỗ trợ. Thứ LT không cho phép là mở thư viện ActiveX của phần mềm khác, ví dụ Excel, mà tệp này thì không cần. LT các bản trước 2024 và bản chạy trên máy Mac thì không dùng được.

Bảng kết quả có tự cập nhật khi sửa text nguồn không?

Không. Kết quả là các dòng chữ rời và tĩnh, không có liên kết nào với text nguồn. Sửa bản vẽ xong thì xoá bảng cũ và chạy lại lệnh. Cần một bảng biết tự cập nhật thì phải dùng đối tượng Table kèm trường dữ liệu, hoặc dùng Data Extraction có bật liên kết.

Lệnh có đếm được số lượng block hay đường nét không?

Không. Bộ lọc đóng cứng ở loại TEXT nên block, polyline hay hatch đều nằm ngoài tầm. Muốn đếm block thì dùng lệnh BCOUNT của Express Tools, Data Extraction, hoặc lisp thống kê nhiều loại block.

Muốn bỏ bảng vừa tạo thì làm sao cho nhanh?

Mã không mở nhóm hoàn tác riêng, nên cách chắc ăn là quét chọn đúng vùng bảng vừa sinh rồi xoá. Bảng nằm tách khỏi hình vẽ nên quét rất nhanh. Nếu lỡ đặt chồng lên bản vẽ thì dùng QSELECT lọc theo kiểu chữ hiện hành để chọn cho gọn.